2

我有三个这样的表:

播放器:id,名称

表匹配事件:id、player_id、eventcategory_id、描述

事件类别:id,名称

关系是: player : matchevent - 1:N matchevent : eventcategory - N:1

在桌面球员中,我有足球运动员的姓名和事件类别事件,如黄牌、替换等。在桌面比赛事件中,我存储属于某个类别的球员事件。

现在我想检索所有玩家拥有的 COUNT 个事件。例如:

  • 第一名球员有 COUNT 张黄牌 0、换人 0 和进球 0
  • 第二名球员有1张黄牌0换人2球
  • 第三名球员有0张黄牌,0换人0进球
  • ETC

我怎样才能在 DQL 中做到这一点?我尝试了 LEFT JOIN 和 IN,但它不起作用。它只选择有事件的玩家,而不是所有玩家。

->createQuery('SELECT p, i
               FROM MyBundle:player p 
               LEFT JOIN p.matchevent i
               WHERE i.eventcategory IN (:eventcategory)
               ORDER BY p.player ASC
               ')
->setParameters(array(
               'eventcategory' => $eventcategory,
))
4

1 回答 1

0

使用正确的连接应该强制它返回所有玩家,即使他们没有事件。

'SELECT p, i
       FROM MyBundle:player p 
       RIGHT JOIN p.matchevent i
       WHERE i.eventcategory IN (:eventcategory)
       ORDER BY p.player ASC
       ')
于 2013-07-08T17:32:51.810 回答