J'ai Doctrine configuration de requête avec base de données Mysql:Doctrine_Pager retourne mauvais résultats avec plusieurs colonnes de 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();
Cette exécute ces trois requêtes (de log MySQL):
SELECT COUNT (*) COMME
num_results
FROM (SELECTm
.)id
FROMmake
m
INNER JOINmodel
m2
ONm
.id
=m2
.make_id
GROUP BYm
.id
,m2
.id
)dctrn_count_query
SELECT DISTINCT
m3
.id
DEmake
m3
INNER JOINmodel
m4
ONm3
.id
=m4
.make_id
GROUP BYm3
.id
,m4
.id
COMMANDER PARm3
.make
ASC LIMIT 1SELECT
m
.id
ASm__id
,m
.make
ASm__make
,m2
.id
ASm2__id
,m2
.year
ASm2__year
,m2
.model
ASm2__model
DEmake
m
INNER JOINmodel
m2
ONm
.id
=m2
.make_id
O WHm
.id
EN ('33') GROUPE PARm
.id
,m2
.id
COMMANDER PARm
.make
ASC
Et le jeu de résultats est
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)
Le problème est avec la deuxième requête qui retourne make.id qui est utilisé dans la troisième requête pour sélectionner 1 marque (Alfa-Romeo, qui dispose de 3 modèles) . Ce que je veux, c'est retourner NOMBRE DE combinaisons de marques/modèles.
Si je change nombre d'articles retournés dans Doctrine_Pager à 2, je reçois 33 lignes (parce que de deux sélectionnés rend Alfa-Romeo dispose de 3 modèles et Audi (qui est à côté) dispose de 30 modèles.
Où je m faire une erreur?