|
|
|
| Доброго времени суток, подскажите пожалуйста как сформировать запрос к базе данных sql либо сделать с помощью срипта php. Чтобы записи (то бишь новости) с переменной date выводились по месяцам и годам на русском.
Что-то вроде этого:
2006 2007 2008
Январь Февраль Март Апрель Май и т.д.
И чтобы появлялся месяц, в котором есть новости с заданной датой, если нет новостей с такой датой ну и месяц чтобы не появлялся в навигационной строке. Заранее спасибо. | |
|
|
|
|
|
|
|
для: Александр1984
(29.09.2008 в 21:09)
| | Дата в базе данных в каком формате хранится? | |
|
|
|
|
|
|
|
для: cheops
(02.10.2008 в 12:08)
| | допустим дата храница в поле типа int сгенерированная функцией time().
просто набор цифр получается.
меня данный вопрос тоже интересует... | |
|
|
|
|
|
|
|
для: nek-v
(02.10.2008 в 17:16)
| | Дата хранится в формате date и выводится из базы виде 2008-08-25 | |
|
|
|
|
|
|
|
для: Александр1984
(02.10.2008 в 18:16)
| | Это можно сделать путем создания массива содержащего русские названия месяцев, с обращением к нему по номеру месяца. Это делается после получения данных из базы, а можно софрмировать такую запись непосредственно при запросе к базе. Оба примера можете посмотреть тут: http://softtime.ru/forum/read.php?id_forum=3&id_theme=57763&page=4
PS. Можно воспользоваться функцией str_replace. | |
|
|
|
|
|
|
|
для: nek-v
(02.10.2008 в 17:16)
| | Зачем дату хранить в "INT"? Для этого есть два типа "DATE" и "TIMESTAMP". | |
|
|
|
|
|
|
|
для: HaJIuBauKa
(03.10.2008 в 08:21)
| | Индексированный INT быстрее календарных типов - при больших объемах таблицы он предпочтительнее. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2008 в 12:00)
| | Тогда невозможно будет использовать функицию DATE_FORMAT | |
|
|
|
|
|
|
|
для: HaJIuBauKa
(03.10.2008 в 12:45)
| | Можно если перевести в MySQL-представление через функцию FROM_UNIXTIME(). | |
|
|
|
|
|
|
|
для: Александр1984
(29.09.2008 в 21:09)
| | Я правильно понял, что нужно вывести календарик с подсвеченными месяцами, если в них есть новости?
Тогда так:
Сначала считываем минимальную и максимальную дату из БД:
$sql = 'select min(c.`putdate`) as minpd, max(c.`putdate`) as maxpd from `news` as c';
$resultMINMAX = mysql_query($sql);
$rowMINMAX = mysql_fetch_object($resultMINMAX);
|
потом на конкретный год, который либо считывается из GET/POST переменной, либо берется текущий считываем все новости:
if (isset($_REQUEST['y'])) $year=$_REQUEST['y']; else $year = strftime("%Y", strtotime($rowMINMAX->maxpd));
$bdate = $year.'-01-01';
$edate = $year.'-12-31';
$sql = 'select c.`id`, c.`title`, c.`putdate`, c.`annot`'
. ' from `news` as c'
. ' where (c.`putdate` >= "'.$bdate.'")'
. ' and'
. ' (c.`putdate` <= "'.$edate.'")'
. ' order by c.`putdate` desc'
. ' limit 0, 100';
|
по аналогии вместо ставьте к примеру
$bdate = $year.'-'.$month.'-01';
| и в циклу по запросу в базу, если не путой результат вывод месяца... и тд
как вывести русские названия месяцев вам уже подсказали. | |
|
|
|
|
|
|
|
для: Александр1984
(29.09.2008 в 21:09)
| | Немного подумал и нашел более изящное решение:
SELECT DATE_FORMAT(c.`putdate`,'%m') as df FROM `news` as c WHERE (DATE_FORMAT(c.`putdate`,'%Y') = 2008)
group by df
|
данный запрос выводит список тех месяцев на 2008 год, которые присутствуют в таблице news, что вам и нужно, дальше дело техники :)
Для вывода названий месяцев нужно %m заменить на %M, правда названия будут английские. | |
|
|
|
|
|
|
|
для: HaJIuBauKa
(03.10.2008 в 08:53)
| |
WHERE (DATE_FORMAT(c.`putdate`,'%Y') = 2008)
|
WHERE YEAR(`putdate`) = 2008
|
| |
|
|
|
|
|
|
|
для: mihdan
(03.10.2008 в 17:36)
| | Тогда бы уж и с месяцем разобрались. | |
|
|
|