2010-11-28 61 views
1

我有主義查詢設置與MySQL數據庫:Doctrine_Pager返回錯誤結果與多個GROUPBY列

$q = Doctrine_Query::create(); 
    $q->select('make.id, make.make, 
    model.id, model.year, model.model') 
     ->from('Make make') 
     ->innerJoin('make.Models model');  
    $q->groupBy('make.id, model.id'); // <-- this is where the problem 
    $q->orderBy('make ASC'); 
    $q->setHydrationMode(Doctrine_Core::HYDRATE_SCALAR); 
    $pager = new Doctrine_Pager($q, 1, 1); // just want one result to prove the concept 
    $items = $pager->execute(); 

此執行此三個查詢(從MySQL日誌):

SELECT COUNT(*)AS num_results FROM(SELECT mid FROM makem INNER JOIN modelm2 ON mid = m2make_id GROUP BY midm2iddctrn_count_query

SELECT DISTINCT m3id FROM makem3 INNER JOIN modelm4 ON m3id = m4make_id GROUP BY m3idm4id ORDER BY m3make ASC LIMIT 1

SELECT mid AS m__idmmake AS m__makem2id AS m2__idm2year AS m2__yearm2model AS m2__model FROM makem INNER JOIN modelm2 ON mid = m2make_id其中m。 IN('33')GROUP BY midm2id ORDER BY mmake ASC

而結果集是

array 
     0 => 
      array 
       'make_id' => string '33' (length=2) 
       'make_make' => string 'Alfa-romeo' (length=10) 
       'model_id' => string '288' (length=3) 
       'model_year' => string '2010' (length=4) 
       'model_model' => string '159' (length=3) 
     1 => 
      array 
       'make_id' => string '33' (length=2) 
       'make_make' => string 'Alfa-romeo' (length=10) 
       'model_id' => string '289' (length=3) 
       'model_year' => string '2010' (length=4) 
       'model_model' => string 'MiTo' (length=4) 
     2 => 
      array 
       'make_id' => string '33' (length=2) 
       'make_make' => string 'Alfa-romeo' (length=10) 
       'model_id' => string '290' (length=3) 
       'model_year' => string '2010' (length=4) 
       'model_model' => string '159 SPORTWAGON' (length=14) 

問題是與返回其在第三查詢用於選擇1個化妝make.id第二查詢(阿爾法 - 羅密歐其具有3種型號) 。我想要的是返回NUMBER OF品牌/型號組合。

如果我更改了Doctrine_Pager回到2項的數量,我得到33行(因爲從兩個選擇,使阿爾法 - 羅密歐有3款車型和奧迪(這是未來)有30種型號。

我在哪裏」中號犯了一個錯誤?

回答

1

您不能在單個組組合多個列。試試這個...

$q->groupBy('make.id'); 
$q->addGroupBy('model.id'); 

或多一點壓縮...

$q->groupBy('make.id')->addGroupBy('model.id');