Ежемесячные категории с MySQL DATE Type - PullRequest
0 голосов
/ 25 октября 2009

Я создаю мини-CMS новостей, где добавленные новости сортируются с использованием столбца типа DATE, например, INSERT date_posted=NOW() и т. Д.

Затем я могу легко перечислить все доступные месяцы с помощью: SELECT DATE_FORMAT(date_posted, '%M %Y') as date_posted. Это составляет ежемесячный список категорий.

У меня проблема с отображением всех новостей за определенный месяц. Я попытался передать переменную date_posted в URL, но не смог включить ее в свой запрос. Если, например, я попробую WHERE date_posted=\"2009-10-16\", результатом будут все новости того дня. WHERE date_posted=\"2009-10\" не работает с другой стороны.

Я передал этот параметр в URL DATE_FORMAT(date_posted, '%M%Y') as month, например, в октябре 2009 года. Тогда WHERE date_posted = $ month ничего не возвращает, потому что, во-первых, я предполагаю, что он в неправильном формате, во-вторых, тип данных MySQL не выводит то, что я хочу, о чем свидетельствует вышеупомянутый жестко закодированный пример.

Пожалуйста, помогите, Спасибо!

1 Ответ

3 голосов
/ 25 октября 2009

Вы должны использовать диапазон в своем предложении where:

where   date_posted >= cast('2009-10-01' as date)
    and date_posted <  cast('2009-11-01' as date)

Чтобы получить даты «2009-10-01» и «2009-11-01», вы можете использовать функции PHP strtotime и date:

$date_from_querystring = "2009-10";
$start_date = $date_from_querystring . "-01";
$end_date = date("Y-m-d", strtotime($start_date . " +1 month"));

Вы также можете использовать функции year и month, но тогда вы не получите никакой выгоды от каких-либо индексов, которые вы можете использовать, поэтому, как правило, это не такое хорошее решение, как диапазон. Пример:

where year(date_posted) = 2009 and month(date_posted) = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...