2012-06-18 4 views
1

Я пытаюсь вычислить значение с использованием DQL в одной таблице. Скажем, что эта таблица называется «ТАБЛИЦА». Он имеет 5 colums:Doctrine: subquery in DQL

  • идентификаторов
  • PEOPLE_COUNT
  • animal_count
  • region_id
  • TYPE_ID

В результате я ищу это сумма людей (когда сгруппированные по область), деленная на сумму животных (при группировке по типу);

SQL, было бы что-то подобное:

SELECT SUM(people_count)/
(
    SELECT SUM(animal_count) 
    FROM TABLE t2 
    GROUPED BY type_id 
) 
FROM TABLE t1 
GROUPED BY region_id 

Как бы вы сделать это в Учении использовании DQL?

ответ

1

Я решил проблему, создав еще один запрос, выполнив его и включив в него первый результат.

Это, вероятно, не самый лучший способ сделать, если вы имеете дело с простым примером, но это было единственное решение для меня в отношении моей архитектуры кода.

+0

Вы можете принять свой ответ тогда :) – j0k

+0

Stackoverflow не позволит мне делать это до завтра;) – frinux

0

У меня есть решение, но я думаю, что, возможно, это лучшее решение для решения вашей проблемы.

В любом случае, сделать два запроса и импортировать результаты первого запроса во втором, может быть решением. К сожалению, это малоиспользуется для нашей базы данных. Более того, иногда нам нужно выполнить только один SQL для сортировки результата столбца на пример.

<?php 

namespace AppBundle\Repository; 

use AppBundle\Entity\MyClass; 
use Doctrine\ORM\EntityRepository; 

class MyRepository extends EntityRepository 
{ 
    public function findWithSubQuery() 
    { 
     return $this->createQueryBuilder('a') 
        ->addSelect(sprintf(
         "(SELECT COUNT(b.id) FROM %s AS b WHERE b.a = a.id GROUP BY a.id) AS otherColumn", 
         MyClass::class 
        )) 
        ; 
    } 
} 

Я использую это решение. Возможно, подзапрос может писать с DQL ojbect, а не с DQL-строкой.

Смежные вопросы