#php #mysql
#php #mysql
Вопрос:
у меня есть база данных mysql, в ней у меня есть таблица под названием articles. Я хочу отобразить архив этой статьи на своей веб-странице. Что я хочу сделать, так это отобразить год, как только пользователь нажмет на год, он покажет список месяцев, в котором содержится статья.. Как я могу написать запрос mysql для этого? Проблема, с которой я сталкиваюсь, заключается в том, что я должен отображать год, который содержит ту же статью, что и месяцы. У меня в таблице указана дата создания статьи в виде метки времени.. Кто-нибудь может подсказать мне, как это сделать?
Редактировать:
CREATE TABLE IF NOT EXISTS `articles` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`pid` int(20) NOT NULL DEFAULT '0',
`department_id` int(20) NOT NULL,
`author` varchar(100) NOT NULL,
`created` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;
Комментарии:
1. Можете ли вы ввести команду
describe articles;
и вставить вывод сюда? Без знания вашей схемы помочь будет довольно сложно 🙂2. Ах, я так и подозревал. Основная проблема заключается в том, что вы храните даты в виде строки:
varchar(25)
вместо собственного поля даты MySQL.3. измените
varchar
наtimestamp
Ответ №1:
Ваш компонент database engine имеет функции, которые извлекают отдельные части данных и времени из метки времени SQL. Например, в MySQL вы могли бы сделать
ВЫБЕРИТЕ ГОД (создан), МЕСЯЦ (создан) ИЗ статей ...
Комментарии:
1. 1 поскольку это правильно, но, учитывая схему, которую только что опубликовал OP, у нас будет полно дел с переходом на собственное поле даты или метки времени
Ответ №2:
я просто предлагаю вам алгоритм
сначала выберите название всего года из базы данных, используя
SELECT FROM_UNIXTIME(created, '%Y') AS `year`
FROM articles
GROUP BY year
затем получите данные за каждый месяц, используя приведенное ниже
SELECT *, FROM_UNIXTIME(created, '%Y') AS `year`
FROM articles
HAVING `year` = 2009
Ответ №3:
чтобы показать статьи
в php
$r = mysql_query(«выбрать * из статей, упорядоченных по годам, месяцам»);
затем отобразите их все
$oldYear =0; while($article = mysql_fetch_array($r){
$year =$article[year]
if($year != $oldYear){
echo $year
oldYear = $year
}
echo $article[month]
}
И с ajax просто сделайте, чтобы каждый mont был подменю year Надеюсь, это поможет