Ben veritabanı olarak mySQL ile Doktrin sorgu kurulum var:
$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();
Bu (mysql günlüğünden) bu üç sorguları yürütür:
SELECT COUNT (*)
num_resultsİTİBAREN (mSEÇ.idmakem{INNER JOIN [ {[(1 BY (5)]}m2mON.id=m2.make_idGRUP )]}.id,m2.id)dctrn_count_querySEÇ FARKLı
m3.idmakem3ICmodelm4{ON JOIN [(0)]}.id=m3BYm4.make_idGRUP.id, {[m3BY (5)]}.idSİPARİŞ.makeASC LIMIT 1SEC
m.idASm__id,m.makem__make, {AS [(6)]}.idASm2__id,m2.year}, {[([(11)] {AS 6)]}.model]) {[(4}]) 14 ([{AS}mIC {artır [(13)]} {[(6)] } {ON [(0)]}.id=m2.make_idNEREDEm.idINm. {[BY ('33 ') grubu ilem.id,m2.idSİPARİŞ (4)]} ASC
Ve sonuç kümesidir
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)
Sorun (3 model var Alfa-Romeo) 1 marka seçmek için üçüncü sorguda kullanılan make.id döndüren ikinci sorguda olduğunu. Ne istediğiniz marka / model kombinasyonları SAYISI döndürmektir.
Ben 2 Doctrine_Pager iade öğe sayısını değiştirmek seçilirse iki Alfa-Romeo 3 model var ve yanında Audi () 30 modelleri var yapar çünkü, ben (33 satır olsun.
Nerede hata yapıyorum?