Получить записи из базы данных MySQL, используя только сегодняшний день и месяц в Symfony2 - PullRequest
1 голос
/ 21 ноября 2011

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

Это код, который я использую в данный момент:

    $em = $this->getDoctrine()->getEntityManager();

    $onthisday = $em->createQuery('
            SELECT otd.thedate, otd.title, otd.content
            FROM ShoutMainBundle:Onthisday otd
            WHERE otd.thedate = CURRENT_DATE()
            ORDER BY otd.id DESC'
        );

    $otd = $onthisday->getResult();

Проблема в том, что, поскольку он использует CURRENT_DATE(), он будет возвращать только те результаты, которые соответствуют сегодняшнему дню, месяцу и году.

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

Как мне этого добиться?

EDIT: Я сейчас использовал этот код:

WHERE MONTH(birthday) = MONTH(CURRENT_DATE)
AND DAY(birthday) = DAY(CURRENT_DATE)

Что дает следующую ошибку:

[Синтаксическая ошибка], строка 0, столбец 100: ошибка: ожидаемая известная функция, получено 'ДЕНЬ'

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

В зависимости от размера вашей таблицы фильтрация по таким дням и месяцам будет не очень быстрой, поскольку не будет индекса, который бы очень хорошо удовлетворял запрос.

Что вы можетесделать, это использовать таблицу «Измерение даты» и присоединиться к ней на основе даты в ваших данных.Затем, если вы отфильтруете эту таблицу на основе дня и месяца, вы вернете одну запись для каждого года из таблицы измерений, которая затем соединится с вашей основной таблицей данных и извлечет всю необходимую информацию вотносительно эффективное поместье.

См. мой ответ на следующий вопрос для объяснения таблицы измерения даты ...

Выберите все месяцы в пределах данного диапазона дат, включая месяцы с 0значения

Надеюсь, что поможет:)

0 голосов
/ 09 декабря 2011

Попробуйте использовать функцию createNativeQuery вместо createQuery

http://www.doctrine -project.org / blog / doctrine2-native-query

0 голосов
/ 21 ноября 2011

Вы можете использовать функции MySQL DAY() и MONTH(), чтобы извлечь только часть даты и месяца из заданной даты.

WHERE DAY(otd.thedate) = DAY(CURRENT_DATE())
    AND MONTH(otd.thedate) = MONTH(CURRENT_DATE())

Для списка функций взгляните на this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...