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日:

  • カテゴリー1
    • イベント1
    • イベント2
  • カテゴリー2
    • イベント3

マイデータベースイベントテーブル:

  • 名前varchar(255)
  • 説明varchar(255)
  • 作成日時
  • place_id int(11)
  • イベント日付日時
  • Organiser_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

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 に答える