0

我不知道如何将我的 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

这很好用,但现在我想让这些搜索结果按年份和日期(而不是时间)分组,所以我的项目分组如下

1月27日:

  • 事件 1
  • 事件 2

1月28日:

  • 活动 3
  • 活动 4

我还需要做的是把它归类到我的类别中,这样我最终将拥有:

1月27日:

  • 第一类
    • 活动一
    • 活动 2
  • 第 2 类
    • 活动 3

我的数据库事件表:

  • 名称 varchar(255)
  • 描述 varchar(255)
  • 创建日期时间
  • place_id int(11)
  • 事件日期日期时间
  • 组织者ID int(11)
  • created_user_id int(11)
  • 类别 int(11)

我的数据库类别表

  • id int(11)
  • 名称 varchar(255)
  • 描述 varchar(255)

我有一个事件实体和一个 EventCategory 实体,而 EventCategory 所做的只是将类别 ID 绑定到事件实体

--更新 - 我的 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->register();

4

2 回答 2

2

您无需编写自己的函数或安装第三方库。由于datetime存储为字符串,您可以使用Doctrine 的函数 SUBSTRING()来提取某些部分并按其分组。

例如:

SELECT SUBSTRING(e.eventdate, 1, 4) AS year FROM … GROUP BY year;
于 2014-05-29T11:23:07.603 回答
1

您需要使用日期函数 DAY、MONTH 或 YEAR(Mysql)Doctrine 不支持这些函数,因此您需要编写自己的(DQL 函数)或安装此库

按年、月分组记录

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate) ORDER BY eventdate ASC

按年、月、日分组记录

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate), DAY(eventdate) ORDER BY eventdate ASC
于 2012-10-30T11:20:15.030 回答