2013-07-01 4 views
2

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

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

стол matchevent: идентификатор, player_id, eventcategory_id, описание

таблица eventcategory: id, имя

отношений: игрок: matchevent - 1: N matchevent: eventcategory - N: 1

В таблице игрока, у меня есть имена футболиста и в eventcategory событий, как желтую карточку, замена и т.д. В таблице 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, 
)) 
+1

Я думаю, вы имеете в виду 'COUNT', а не' SUM' –

+0

Count, конечно. Виноват. – repincln

ответ

0

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

'SELECT p, i 
     FROM MyBundle:player p 
     RIGHT JOIN p.matchevent i 
     WHERE i.eventcategory IN (:eventcategory) 
     ORDER BY p.player ASC 
     ') 
Смежные вопросы