выбрать данные, которые относятся к категории

У меня есть три таблицы, как это:

таблица игрок: идентификатор, имя

таблица matchevent: id, player_id, eventcategory_id, описание

таблица категория событий: идентификатор, имя

Отношения: игрок : событие матча - 1:N событие матча : категория события - N:1

В таблице player у меня есть имена футболистов и события категории событий, такие как желтая карточка, замена и т. д. В таблице matchevent я храню события игроков, которые принадлежат к какой-либо категории.

И теперь я хочу получить COUNT событий, которые есть у всех игроков. Например:

  • у первого игрока COUNT желтых карточек 0, замен 0 и голов 0
  • у второго игрока 1 желтая карточка, 0 замен и 2 гола
  • у третьего игрока 0 желтых карточек, 0 замен 0 голов
  • так далее

Как я могу сделать это в 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,
))

person repincln    schedule 01.07.2013    source источник
comment
Я думаю, вы имеете в виду COUNT, а не SUM   -  person David Starkey    schedule 01.07.2013
comment
Считай, конечно. Виноват.   -  person repincln    schedule 01.07.2013


Ответы (1)


Используйте правильное соединение, которое должно заставить его вернуть всех игроков, даже если у них нет событий.

'SELECT p, i
       FROM MyBundle:player p 
       RIGHT JOIN p.matchevent i
       WHERE i.eventcategory IN (:eventcategory)
       ORDER BY p.player ASC
       ')
person Marissa    schedule 08.07.2013