我无法弄清楚我如何将我的LIKE搜索与日期和DQL中的类别分组 ..
解释
我有一个搜索功能,可以在重量后搜索我的事件..它看起来像这样:
SELECT e as event,
(CASE
(e.name LIKE :searchterm) THEN 10
ELSE 0
END) +
(CASE
WHEN (e.name LIKE :searchtermFull) THEN 5
ELSE 0
END)
AS weight
FROM
\Entities\Event e
WHERE
e.name LIKE :searchterm OR
e.name LIKE :searchtermFull
ORDER BY weight DESC
这样可以正常使用,但现在我希望将这些搜索结果按年份和日期(而不是时间)分组,以便我的项目按此分组:
27 jan:
28 jan:
我还需要做的是将它分组我的类别,这样我最终会有:
27 jan:
我的数据库事件表:
我的数据库类别表
我有一个Event Entity和一个EventCategory实体,EventCategory所做的只是将类别ID绑定到Event Entity
- 更新 - 我的sql到目前为止 -
SELECT
c.name,
YEAR(e.eventdate) as year,
MONTH(e.eventdate) as month,
DAY(e.eventdate) as day,
count(*) as total
FROM `events` as e, `eventCategories` as c
WHERE
e.category = c.id
GROUP BY
YEAR(e.eventdate),
MONTH(e.eventdate),
DAY(e.eventdate)
ORDER BY eventdate ASC
通过在自动装带器中写入来包含DoctrineExtensions:
$ classLoader = new Doctrine \ Common \ ClassLoader('DoctrineExtensions',ROOT.DS.“library”); $ classLoader->寄存器();
答案 0 :(得分:2)
您无需编写自己的功能或安装第三方库。由于datetime
存储为字符串,因此您可以使用Doctrine's function SUBSTRING()
来提取某些部分和组。
例如:
SELECT SUBSTRING(e.eventdate, 1, 4) AS year FROM … GROUP BY year;
答案 1 :(得分:1)
您需要使用日期函数DAY,MONTH或YEAR( Mysql ) Doc原则不支持这些功能,因此您需要自己编写(DQL functions)或安装this library
按年,月分组记录
WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate) ORDER BY eventdate ASC
按年,月和日分组记录
WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate), DAY(eventdate) ORDER BY eventdate ASC