Вопрос

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

В моей базе данных у меня есть новостные сообщения, скажем, с 3 столбцами (Id, заголовок, дата).Там, где Id и title объясняют сами себя, дата сохраняется в значениях mktime(), другими словами, количество секунд, прошедших с 1 января 1970 года.

Теперь то, что я хочу сделать, это создать ссылку на архив, которая будет отображаться как таковая

  • Июль 2009 года
  • Июнь 2009 года
  • Март 2009 года
  • Февраль 2009
  • Декабрь 2008 года

Обратите внимание, что месяцы, за которые не было сообщений, не отображаются.

Теперь в качестве первоначальной мысли я подумал

  1. Начните с последнего дня текущего месяца
  2. И получите Значение Первого дня текущего месяца
  3. Выполните запрос MySQL COUNT / mysql_num_rows для сообщений, которые были date>= First_Day_Seconds И date <= последние_дни_секунд
  4. Отобразить или поместить значения в массив
  5. Выполните другой запрос, чтобы проверить, найдены ли еще какие-либо значения, ГДЕ date < First_Day_Seconds (прервать, если строки не были найдены)

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

Скажу заранее, дата должна быть в формате mktime

Это было полезно?

Решение

Я бы предложил использовать "собственный" формат времени базы данных, но он также работает с временными метками UNIX.

Вы можете просто сделать:

SELECT DISTINCT FROM_UNIXTIME(date, '%M %Y') FROM posts;

Опционально с WHERE пункт, ограничивающий даты прошлыми или будущими датами.Возможно, ORDER оговорка, добавленная для пущей убедительности.Это должно быть практически все, что нужно, позвольте базе данных выполнять как можно больше работы.

Если вам нужны дополнительные параметры форматирования, выберите даты с помощью "%Y-%m" вместо этого отформатируйте их в PHP:

date($myCustomFormat, strtotime("$date-01"));

Другие советы

Вы можете использовать этот запрос, чтобы получить годы

"SELECT *,content_id,COUNT(content_id) AS itemCount FROM content_mast GROUP BY DATE_FORMAT(date_upload,'%Y') DESC";

теперь вы можете использовать этот запрос, чтобы получить месяц этого года

$tday = date("Y", $datetime);
$s1="select * from content_mast where DATE_FORMAT(date_upload,'%Y')=$tday";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top