Перейти к содержимому



Архив. По годам и месяцам

#1 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0
0

Отправлено 11 Июль 2009 - 15:39

Как сделать так, чтобы записи выводились в соответствии со следующей иерархией

ГОД
--- Январь
-------- Событие1
-------- Событие2
--- Февраль
-------- Событие3
и т.д.

после с датой имеет тип datetime (т.е. 2009-04-08 00:00:00)
Делаю на php+mysql

Когда то давно видел по видео Евгения Попова, как он делал то что мне надо, но из-за этого не хочется весь видеокурс качать с инета...

 

 

  • 0

#2 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 11 Июль 2009 - 17:57

Копайте в сторону GROP+ORDER BY в SQL
  • 0

#3 Евгений

Евгений
    Topic Starter
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 11 Июль 2009 - 18:56

написать то написал... работает, как надо, только что-то мне подсказывает что можно как то это оптимизировать

<?php
	$query = mysql_query("SELECT date_format(date_end, '%Y') as date_year FROM `ТАБЛИЦА` GROUP BY date_year"));
	while($result = mysql_fetch_array($query)) {
		echo "<ul><li>".$result['date_year']."</li>";
		$y1 = $result['date_year']."-01-01 00:00:00";
		$y2 = $result['date_year']."-12-31 00:00:00";
		$query2 = mysql_query("SELECT date_format(date_end, '%m') as date_mes FROM `ТАБЛИЦА` WHERE date_end  >= '".$y1."' and date_end <= '".$y2."' GROUP BY date_mes");
		while($result2 = mysql_fetch_array($query2)) {
			echo "<ul><li>".$result2['date_m']."</li>";
			
			$y3 = $result['date_year']."-".$result2['date_mes']."-01 00:00:00";
			$y4 = $result['date_year']."-".$result2['date_mes']."-31 00:00:00";
			echo "<ul>";
			$query3 = mysql_query("SELECT * FROM `ТАБЛИЦА` WHERE date_end  >= '".$y3."' and date_end <= '".$y4."' ORDER BY date_end");
			while($result3 = mysql_fetch_array($query3)) {
				echo "<li>".$result3['name']."</li>";	
			}
			echo "</ul></ul>";
		}
		echo "</ul>";
	  }
?>

  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Июль 2009 - 10:37

Евгений, А может попробовать так?
<?php

	$events = array();

	$sql = "SELECT YEAR(date_end) as date_year FROM [table] GROUP BY (date_year)";
	$query = mysql_query($sql);
	while($result = mysql_assoc_array($query))
		$events[$result['date_year']] = array();

	foreach($events as $key => $value)
	{
		$sql = "SELECT MONTH(date_end) as date_month FROM [table] WHERE YEAR(date_end)='{$key}' GROUP BY (date_month)";
		$query = mysql_query($sql);
		while($result = mysql_assoc_array($query))
			$events[$key][$result['date_month']] = array();
	}

	foreach($events as $key => $value)
	{
		foreach($value as $key2 => $value2)
		{
			$sql = "SELECT DAY(date_end) as date_day FROM [table] WHERE YEAR(date_end)='{$key}' AND MONTH(date_end)='{$key2}' ORDER BY date_end";
			$query = mysql_query($sql);
			while($result = mysql_assoc_array($query))
				$events[$key][$key2][] = $result;
		}
	}
?>

Как выводить с помощью foreach думаю сам додумаешься. Конечно не знаю какова будет нагрузка на базу данных при таких частых запросах во вложенном цикле.
  • 0

#5 Евгений

Евгений
    Topic Starter
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 12 Июль 2009 - 11:09

Спасибо, ZiTosS, чуть позже попытаюсь разобраться

Оффтоп:
как в теге делать отступы ровные? tab нельзя нажимать, пробелы ставить? :)
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Июль 2009 - 11:36

Евгений,
Я сначала в блоконте набираю или прям в bb-тегах пробелами.

p.s. Код на практике не проверял, но вроде должен работать. Советую прежде чем его испытывать, Проверять каждое действие. Может моя логика немного не совпадает с практикой.
  • 0


Оформление форума – IPBSkins.ru