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 (m
SEÇ.id
make
m
{INNER JOIN [ {[(1 BY (5)]}m2
m
ON.id
=m2
.make_id
GRUP )]}.id
,m2
.id
)dctrn_count_query
SEÇ FARKLı
m3
.id
make
m3
ICmodel
m4
{ON JOIN [(0)]}.id
=m3
BYm4
.make_id
GRUP.id
, {[m3
BY (5)]}.id
SİPARİŞ.make
ASC LIMIT 1SEC
m
.id
ASm__id
,m
.make
m__make
, {AS [(6)]}.id
ASm2__id
,m2
.year
}, {[([(11)] {AS 6)]}.model
]) {[(4}]) 14 ([{AS}m
IC {artır [(13)]} {[(6)] } {ON [(0)]}.id
=m2
.make_id
NEREDEm
.id
INm
. {[BY ('33 ') grubu ilem
.id
,m2
.id
Sİ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?