我正在网站上构建服务,根据所查看的数据显示历史记录中的事件。因此,如果您在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列:错误:预期的已知函数,得到 '日'
答案 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。