Всем привет. В общем я создал фильтр товаров и решил что было бы не плохо чтоб обсчитывалось кол-во товаров для каждой опции , а также пересчитывалось при выборе фильтра'ов чтоб при отсутствие результатов просто disable'ить checkbox. Вообще я кожу на symfony по этому код будет представлен в doctrine которая не поддерживает без костылей подзапросов , но и на sql я тоже предоставлю варинаты. Моя проблема - как мне соединить все COUNT в один запрос, чтоб бд не офигевала. Вообще говорят что такое лучше решать через elasticsearch если есть мнение насчёт этого не стесняйтесь высказывать его. И так поехали. Модель product'a - EAV БД: Опции фильтров выглядят так: PHP: $options = array( "brand" => array("Brand", "Another Brand", "Some Brand"), "country" => array("Poland", "Russia", "Ukraine") ); // но для примера будет достаточно этого $options = ['Poland', 'Russia', 'Ukraine']; вот как я подсчитываю кол-во: PHP: public function findAllCountedOptions() { $arr = ['Poland', 'Russia', 'Ukraine']; $result = []; foreach ($arr as $item){ $qb = $this->getEntityManager()->createQueryBuilder(); $query = $qb ->addSelect($qb->expr()->countDistinct('p.id')) ->from(Product::class, 'p') ->innerJoin('p.attributeValues', 'av_s') ->andWhere('av_s.value = :value_s') ->setParameter('value_s', $item) // при условие что выбран фильтр Plastic // ->innerJoin('p.attributeValues', 'av_p') // ->andWhere('av_p.value = :value_p') // ->setParameter('value_p', 'Plastic') ->getQuery() ->getResult() ; $result[$item] = $query[0][1]; } return $result; } на выходе получаем такой массив: PHP: array( "Poland" => "58" "Russia" => "65" "Ukraine" => "58" ); вот так выглядит этот запрос в sql: PHP: SELECT COUNT(DISTINCT p0_.id) AS sclr_0 FROM product p0_ INNER JOIN attribute_value a1_ ON p0_.id = a1_.product_id WHERE a1_.value = ? Вообще можно напрямую к таблице value обращаться sql: PHP: SELECT COUNT(DISTINCT av.product_id) FROM attribute_value AS av WHERE av.value = 'Plastic' но я не знаю как тут добавлять условие , когда несколько фильтров уже выбрано , то есть с таблицей product я просто через innerjoin добавляю select и новый параметр , как join'ить одну таблицу я не знаю. Короче возможно ли вообще COUNT p.id для нескольких опциий в один запрос, ну чтоб кол-во был для каждой опции было отдельно посчитано. Спасибо за ваше время.