#symfony #doctrine
#symfony #доктрина
Вопрос:
Мне нужно перечислить данные в таблице с несколькими данными. Мне нужно получить количество сыгранных игр (‘COUNT (p.partie) as sumparties’) и количество выигранных игр.
Вот мой репозиторий :
$qb->select('j AS jou')
->innerJoin('j.playeds', 'p')
->addSelect('SUM(p.points) AS sumpoints')
->addSelect('SUM(p.max) AS summax')
->addSelect('COUNT(p.partie) as sumparties')
->addSelect('COUNT(p.partie) as sumwins WHERE p.points = 1')
->groupBy('j.id')
->orderBy('sumpoints', 'DESC');
Итак, для первого это работает :
->addSelect('COUNT(p.partie) as sumparties')
Я получаю общее количество сыгранных игр. Но мне не удается подсчитать количество выигранных игр. Я пытался с этим, но, очевидно, это не работает :
->addSelect('COUNT(p.partie) as sumwins WHERE p.points = 1')
Спасибо за вашу помощь 🙂
Ответ №1:
Вместо объединения select
и where
:
->addSelect('COUNT(p.partie) as sumwins WHERE p.points = 1')
Разделите предложение where:
->addSelect('COUNT(p.partie) as sumwins')
->andWhere('p.points = 1')
Редактировать:
Как я упоминал в своем комментарии, для вашего варианта использования вам нужно сделать что-то вроде этого:
->addSelect('SUM(CASE WHEN p.points = 1 THEN 1 ELSE 0 END) AS sumwins')
Комментарии:
1. Привет, к сожалению, это не работает, поскольку предложение Where применяется ко всей функции. Мне нужно применить where только к этому количеству (стр. часть)
2. Не могли бы вы попробовать это вместо этого:
->addSelect('SUM(CASE WHEN p.points = 1 THEN 1 ELSE 0 END) AS sumwins')
?