Делаю календарик новостей, есть небольшой вопрос (не по датам)

Spear

почемучка
Делаю календарик новостей, есть небольшой вопрос (не по датам)

Здравствуйте,
я вот сейчас пишу календарь новостей, выглядит как протсой календарь, но разве что со ссылками с каждого числа на определенную страницу.

Очень хочу сделать так:
если в БД на этот день нет новости, то ссылку не делать.
Видел пару раз такое в блогах различных (где точно видел непомню).
Красиво смотрится, да и пользователю не нужно лишний раз беситься, если по ссылке 01-05-2003 новости не окажется :)

Вот решил спросить - как это реализовывается? Я пока никак непойму..ну разве что по одному запросу в БД на каждую дату с проверкой существования записи )) но это очень жырно будет - от 28 до 31 запроса на ровном месте

что посоветуют профи? :)

Немного детальнее о данных:
все новости хранятся в таблице
table 1 (например), дата новости в поле data. тип поля - datetime (2005-01-01 01:01)
 

Spear

почемучка
alexhemp
SelenIT
сам календарь у меня готов и сделан, и проблем с mktime нет. Календарь корректно даже выделяет дни недели и так далее и выглядит красиво..
вопрос именно в том как лучше выполнить проверку на присутствие новостей в какой-то день? в голове не укладывается :(
 

SelenIT

IT-лунатик :)
Spear
Как вариант: выбираешь из таблицы новостей даты за текущий месяц с группировкой по дням (например, GROUP BY DATE_FORMAT(data,'%d')). Результаты сохраняещь в массив.
Затем рисуешь свой календарь. При выводе каждого дня проверяешь его присутствие в том массиве (например, [m]in_array[/m]), в зависимости от этого ставишь/не ставишь ссылку.
 

Spear

почемучка
вот например структура таблицы новостей
id (int) | text (text) | data (datetime)

Как посоветуете делать?

-~{}~ 20.06.05 01:41:

SelenIT
спасибо, попробую! Сейчас доделаю немного другой код, и займусь этим.
Я так понимаю - вы тоже ночью не спите? :) Если что - загляните, пожалуйста, в этот топик через часик ;)

-~{}~ 20.06.05 01:43:

попутный маленький вопросик (очень маленький чтобы создавать новую тему):
почему говорят что нежелательно ставить переменную в кавычки?
ну тоеcть не echo "total = $total"; a echo "total =".$total;
?
Может вопрос и глупый, но все же очень интересно знать.
 

Spear

почемучка
sage
учитывая, что в день публикуется в среднем по 5 новостей, а за месяц их не меньше 160-180 то этот вариант по-моему очень нагрузит БД.
 

Spear

почемучка
Ех блин, что-то еполучается:
примечание - поле с датой не data а time
$yearCal и $monthCal - год и месяц. (могут быть не обязательно текущими).

отредактировал
/* news at every day */
$NewsStatistics = array();
$res = $db->sql_query("SELECT sid, DATE_FORMAT(time,'%d') as time FROM table_news where time like '$yearCal-$monthCal%' GROUP BY DATE_FORMAT(time,'%d')");
while(list($sid, $time)=$db->sql_fetchrow($res)){
$a = array ($sid=>$time);
$NewsStatistics = $NewsStatistics+$a;
}
/* EoF */
всеравно такая трабла - идет обращение в бд но с массивом не то что-то - не работает
 

SelenIT

IT-лунатик :)
PHP:
$days_with_news = array();
while(list($sid, $time)=$db->sql_fetchrow($res)){
   $days_with_news[] = $time;
}
 

Frol

Новичок
ой, как с датами работают.
идем в мануал читать как работать с датами.
 

Spear

почемучка
SelenIT
спасибо большое! уже сделал ;) и красиво теперь сомтрится -если есть новосте то фон светло-серо-голубой и ссылка на день. Если нету - серый фон и ссылки нет.
кррррасота ;) и удобно!
Спасибо ещё раз!

-~{}~ 20.06.05 03:02:

Frol
с датами в РНР я нормально работаю.. вот с мускулом трабелЪ ;) но уже все окей

-~{}~ 20.06.05 03:53:

ещё такой вопросик (очень важный :()
как лучше из бд взять записи за такую-то неделю в таком-то месяце? по мануалу мускула ищу, но пока ничего ненашел.. может и нашел но не понял что это именно то что ищу.

Или хотя бы выбрать из базы записи между таким-то и таким-то числом.
Хотя первый вариант гораздо убонее был бы.
Очень жду помощи
 

ego|brain

Guest
select * from test where week(now()) - week(test.value) = 0;

берет записи с датами на этой неделе. Дальше сам ;)
 

Spear

почемучка
блин.. тут такая проблема:
нужно как-то вывести новости за определенную неделю.

например есть дата 06-2005 (месяц.год, без числа) и перемення $W. Я пытаюсь сделать так:
если $W = 1 то узнать первое число 06 месяца 2005 года на первой неделе и последнее число на этой же неделе.. потом сделаю просто в БД
from * where time > $pervoeChilso AND time < $vtoroeChislo
помогите, пожалуйста
 

ego|brain

Guest
Автор оригинала: Spear
например есть дата 06-2005 (месяц.год, без числа) и перемення $W. Я пытаюсь сделать так:
если $W = 1 то узнать первое число 06 месяца 2005 года на первой неделе и последнее число на этой же неделе.. потом сделаю просто в БД
from * where time > $pervoeChilso AND time < $vtoroeChislo
помогите, пожалуйста
имхо так лучше

select * from test where week(`value`)-week(`value` - interval dayofmonth(`value`)-1 day) =4-1 && month(`value`) = 6;

Болдом первым - номер недели в месяце. Болдом вторым - номер месяца. И мусть MySQL работает за тебя ;)

Запрос не проверял могут быть погрешности +/-день =)
 

Spear

почемучка
ego|brain
у меня проблема...вообщем немогу в код с которым работаю вставить "узнать номер недели" :(

Народ, если кто знает - подскажите, пожалуйста:
есть дата
месяц-год (06-2005 например) и переменная $w (значение от 1 до 5)
$w - это номер недели в месяце (формируется в календаре).

нужно узнатьисходя их $w номер недели в году. Всю ночь ломаю себе голову..не знеаю как сделать :( просто ТУПИК :(
 

Spear

почемучка
ego|brain
ой.. да я уже и сам незнаю *бьет себя в лоб. хохочет*
просто очень долго объяснть :( я уже еле-еле до клавы дотягиваюсь (ужи диван пододвинул.. лежу на диване и ищу в нете ответ на вопрос ))
 
Сверху