2012-06-18 81 views
1

我試圖在一張表上使用DQL計算一個值。假定這個表格被命名爲「TABLE」。它有5個colums:學說:DQL中的子查詢

  • ID
  • 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字符串來編寫。