Дополнительный выбор с помощью предложения where

#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') ?