Подайте идею, умный календарь на PHP и MySQL

Gmp
На сайте с 12.10.2008
Offline
83
Gmp
3824

Пните пожалуйста в какую сторону копать, в общем задача такая.

Пусть имеется таблица, в которой к примеру, 2 поля: date и text.

В поле date хранится дата в формате DATE или DATETIME (например "2009-01-01 00:00:00" или "2009-01-01" соответственно), в поле text - какой-то текст.

Допустим, я хочу создать календарь, в котором числа будут ссылками (календарь-то несложно генерировать в цикле), но при этом нужно сделать так, чтобы если в таблице на данное число месяца нет ни одной записи, это число было не активным, т.е. нужно проверять при генерации есть ли такая дата в таблице или нет.

Как это осуществить более-менее правильно? не делать же 29-31 запросов на каждый месяц? :confused:

G.Vad!k
На сайте с 04.10.2007
Offline
74
#1

Думаю это пригодиться точно =)

toxic steel
На сайте с 28.12.2007
Offline
175
#2
Gmp:
не делать же 29-31 запросов на каждый месяц?

как вариант: выбрать число ас дэй, где месяц == куррент_монтх, сложить это всё в массив[дэй], формируя календарь циклом проверять наличие ключа-дня в массиве.

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
M
На сайте с 23.01.2009
Offline
12
#3

На словах, как варианта, может и не идеальный.

Создаешь массив – месяц:


$a = array(
'2009-01-01',
'2009-01-02',
'2009-01-03',
);

Это можно сделать с помощью пару стандартных функции. Затем достаешь одним запросом оригинальные по дате записи за текущий месяц.

Прогоняешь два массива если есть совпадения по дате, то подсвечиваешь.

написание скриптов... icq 377816882
Gmp
На сайте с 12.10.2008
Offline
83
Gmp
#4

toxic steel, modobaks, спасибо, кажется то что нужно.

modobaks:
достаешь одним запросом оригинальные по дате записи

это при помощи SELECT DISTINCT если я правильно понимаю?

BE
На сайте с 09.07.2008
Offline
28
#5

А что если делать так?


$query = "SELECT * FROM calendar";
$select = mysql_query($query);

if (mysql_num_rows($select))
{
while ($calender = mysql_fetch_array($select))
{
if ($calender['text']=='') $date = $calender['date'];
else $date = "<a href=show.php>{$calender['date']}</a>";
//Сюда можно впихнуть саму таблицу
echo $date;
}
}
BlackEvil, Rest In Peace...
M
На сайте с 23.01.2009
Offline
12
#6
это при помощи SELECT DISTINCT если я правильно понимаю?

Да..........................

toxic steel
На сайте с 28.12.2007
Offline
175
#7
Gmp:
это при помощи SELECT DISTINCT если я правильно понимаю?

это зависит от того, какое количество записей у вас за день планируется... если по умолчанию вы постите 1 в неделю - можно без DISTINCT...

тут уже по месту надо определяться, но вектор верный.

VN
На сайте с 05.05.2009
Offline
34
#8

BlackEvil,

BlackEvil:
"SELECT***FROM*calendar";

тяжеловато будет, при большом количестве записей.

BE
На сайте с 09.07.2008
Offline
28
#9
V@NEK:
BlackEvil,
тяжеловато будет, при большом количестве записей.

Конечно же это будет фильтроваться where по текущему месяцу.

Кто что думает о такой реализации? Просто интересно знать стоит ли использовать такой метод или нет...

kil
На сайте с 03.04.2006
Offline
84
kil
#10

Как вариант могу посоветовать работать с датами в виде таймспемпов + интервалы. Т.е. можно будет сделать выборку из БД событий, актуальных в определенном интервале времени. Ну и потом проверять совпадения.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий