Архив новостей

regi

Новичок
Архив новостей

есть таблица с новостями и необходимо сделать архив новостей такого типа:

2003 год:
Январь
Февраль
Март
....
Декабрь
2004 год:
Январь
...
Декабрь
2005 и так далее. Месяца являются ссылками.

таблица такого вида: nid, ntitle, контент всякий, ndate

реализовал я это как то неуклюже:
PHP:
$qall = "SELECT YEAR(ndate) as ndate FROM news GROUP BY(ndate) ORDER BY nid"; 
$qr = mysql_query($qall);

while($row = mysql_fetch_array($qr)){
 $query = "SELECT DISTINCT(MONTHNAME(ndate)) as mdate FROM news WHERE YEAR(ndate)=".$row['ndate']." ";
 $result = mysql_query($query);

 echo $row['ndate']."<br>"; 
 while($mrow = mysql_fetch_array($result)){
  echo  $mrow['mdate']."<br>";
 };

};
 

Фанат

oncle terrible
Команда форума
сделай один запрос
год выводи только когда сменился.
 

regi

Новичок
Спасибо, Фанат.
Не знаю, почему не догадался так сделать сразу :)

Сделал примерно так:
PHP:
$query = "SELECT *, YEAR(ndate) AS nyear, MONTH(ndate) AS nmonth FROM news ORDER BY nid DESC";
$result = mysql_query($query);
$year = 0;
$month = 0;
while($row = mysql_fetch_array($result)){
 if($row['nyear'] != $year){
  $year = $row['nyear'];
  echo $row['nyear'].'<br>';
 };
 if($row['nmonth'] != $month){
  $month = $row['nmonth'];
  echo $months[$month].'<br>';
 };
};
 

Фанат

oncle terrible
Команда форума
ну, идея у тебя правильная, но то, как ты реализовал - это не дело.
зачем тебе выбирать ВСЕ записи?
когда нужно всего пара десятков?
 

Фанат

oncle terrible
Команда форума
поля тоде лишние, да
но я говорил о СТРОКАХ
в первых своих запросах ты ведь не всю базу выбираешь, а только нужные строки? Ну так сделай то же самое и сейчас
 

Фанат

oncle terrible
Команда форума
если я не ошибаюсь, ты опять навыбирал лишнего
раз в 30 примерно больше, чем надо
 

regi

Новичок
пробовал сейчас, пробовал, ничего лучше придумать не могу :)
если только group by year(ndate), month(ndate)
 
Сверху