[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Архив. По годам и месяцам
Adva
Как сделать так, чтобы записи выводились в соответствии со следующей иерархией

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

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

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



Спустя 2 часа, 19 минут, 10 секунд (11.07.2009 - 19:24) FatCat написал(а):
ИМХО, проще всего в цикле счетчиками выводить.

Спустя 26 минут, 22 секунды (11.07.2009 - 19:50) FatCat написал(а):
PHP
// Открываем соединение
$connection_id mysql_connect$sql_host,$sql_user,$sql_pass);
$query_id mysql_query($the_query$connection_id);
// Запускаем счетчики
$y 0// годы
$m 0// месяцы
$d 0// дни
// Обработка результатов запроса в цикле:
while ( $r mysql_fetch_array($query_idMYSQL_ASSOC) )
{
    if(
intval(substr($r['date'],0,4))>$y// Если год увеличился
    
{
        
$y intval(substr($r['date'],0,4); // Перещелкиваем счетчик
        
echo "Год ".$y."<br>"// Выводим год
    
}
    
$new_m 12*$yintval(substr($r['date'],5,2);
    if(
$new_m>$m// Если месяц увеличился
    
{
        
$m $new_m// Перещелкиваем счетчик
        
echo "&nbsp;&nbsp;&nbsp;Месяц ".$m."<br>"// Выводим месяц
    
}
    echo 
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$r['text']."<br>"// Текст событий выводим всегда.
}
// Закрываем соединение
mysql_close($connection_id);


Как-то так.
Написал не проверяя; мои извинения, если где-то очепятки.

Спустя 14 часов, 46 минут, 16 секунд (12.07.2009 - 10:36) Adva написал(а):
Сделал вот такой запрос
SQL
"SELECT * FROM `таблица` ORDER BY date"

поправил вот эту строчку, потому что с ней не правильно пишет дату
PHP
$new_m = intval(substr($r['date'],5,2);


Должно было вывести вот так:
Цитата
2008
--- Апрель
-------- Событие
2009
--- Апрель
-------- Событие
--- Май
-------- Событие


А вывелось
Цитата
2008
---- Апрель
------- Событие
2009
---- Событие
---- Май
--------- Событие

потому что if($new_m>$m) не соблюдается smile.gif

--------------------------------
Вчера пока не увидел Вашего сообщения, сам пытался что-то сделать. Вот что получилось smile.gif Правда у меня не такой красивый код и наверно жутко не оптимизированный)

Код
$query = mysql_query("SELECT count(id) as count_y, date_format(date, '%Y') as date_year FROM `таблица` GROUP BY date_year") or die(mysql_error());
while($result = mysql_fetch_array($query)) {
     echo "<ul>".$result['date_year']." (".$result['count_y'].")";
     $y1 = $result['date_year']."-01-01 00:00:00";
     $y2 = $result['date_year']."-12-31 00:00:00";
     $query2 = mysql_query("SELECT count(id) as count_id, date_format(date, '%m') as date_mes FROM `таблица` WHERE date  >= '".$y1."' and date <= '".$y2."' GROUP BY date_mes") or die(mysql_error());
     while($result2 = mysql_fetch_array($query2)) {
          echo "<ul><li>".$result2['date_mes'])." (".$result2['count_id']." )</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  >= '".$y3."' and date <= '".$y4."' ORDER BY date") or die(mysql_error());
          while($result3 = mysql_fetch_array($query3)) {
               echo "<li>".$result3['name']."</li>";
          }
          echo "</ul></ul>";
     }
     echo "</ul>";
}

Выводит все правильно, например
Цитата
2007 (2)
--- Апрель (2)
------- Событие
------- Событие
2008 (3)
--- Апрель (1)
------- Событие
--- Май (2)
------- Событие
------- Событие

но 3 запроса и вложеные циклы для такой задачи это наверно слишком?! biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.