2012-03-12 37 views
0

我遇到了按計數字段對查詢結果進行排序的問題。我的簡化查詢:在左連接表中使用按次數排序

$customers = Doctrine_Core::getTable("Customer")->createQuery("c") 
    ->leftJoin("c.Project p") 
    ->orderBy("COUNT(p.id) ASC"); 
    ->execute(); 

我很確定這個問題不是與教義有關。從應用程序日誌中檢索到的ORM生成的查詢只選擇一行,它包含一個一行:

ORDER BY COUNT(r2.id) ASC 

除去其中所有的行都被適當地選擇後。

ORDER BY子句會導致查詢只從customers表中選擇一行。我認爲這與沒有任何項目分配給他們的客戶有關。我究竟做錯了什麼?

+1

可以添加產生的ORM,其餘查詢問題?通過聚合值進行排序只能在分組查詢上完成 - 如果您想通過p.id(而不是p.id的計數)進行排序,那麼您應該將查詢更改爲'ORDER BY r2.id ASC '。 – 2012-03-12 14:04:50

+0

不,我希望它由相關的行數進行排序。 – Przemek 2012-03-12 15:16:16

+0

「否」表示您無法將其餘的ORM生成的查詢添加到問題中? – 2012-03-12 15:29:46

回答

0

如果您是通過項目的客戶數量嘗試組,嘗試對客戶的主鍵使用GROUP BY子句和集合:

$customers = Doctrine_Core::getTable("Customer")->createQuery("c") 
->select('c.*, count(p.id) as count') 
->leftJoin("c.Project p") 
->groupBy('c.id') // or the primary key of Customer 
->orderBy("count ASC") 
->execute();