仅使用Symfony2中今天的Day和Month从MySQL数据库中检索记录

时间:2011-11-21 09:33:57

标签: mysql symfony doctrine-orm

我正在网站上构建服务,根据所查看的数据显示历史记录中的事件。因此,如果您在1月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()时,它只返回与今天,月和年匹配的结果。

我要做的只是使用今天和月份检索记录,而忽略年份。

我怎样才能做到这一点?

编辑: 我现在使用了这段代码:

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

出现以下错误:

  

[语法错误]第0行,第100列:错误:预期的已知函数,得到   '日'

3 个答案:

答案 0 :(得分:1)

根据表的大小,对这样的日期和月份进行过滤不会很快,因为没有一个索引可以很好地满足查询。

您可以使用“日期维度”表并根据数据中的日期加入该表。然后,如果您根据日期和月份过滤该表,您将从维度表中返回每年的单个记录,然后将连接到您的主数据表并提取您需要的所有信息。相对有效的庄园。

有关日期维度表的说明,请参阅我对以下问题的回答...

Select all months within given date span, including the ones with 0 values

希望有所帮助:)

答案 1 :(得分:0)

尝试使用createNativeQuery函数代替createQuery

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

答案 2 :(得分:-1)

您可以使用MySQL DAY()MONTH()函数从指定日期单独提取日期和月份部分。

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

有关功能列表,请查看this