par
jcmartin01 » 08 déc. 2010, 13:10
Bonjour,
Je cherche à modifier l'ordre des jointures dans une requete générée par Propel
Voici la structure de ma base
Code : Tout sélectionner
tableFAMILLE [ id, name ]
tableMEMBRE [ id, famille_id, name ]
tableBIDON [ id ]
une requete, simple, me permettant de récupérer les membres d'une famille serait
Code : Tout sélectionner
select * from famille, membre where membre.famille_id = famille.id and famille.id = 4
J'ai pris l'habitude d'écrire ce genre de requete ainsi (pour limiter le nombre de tuples traitées par la requete SQL) :
Code : Tout sélectionner
select * from famille join membre on (membre.famille_id=famille.id and famille.id=4)
Pour aller encore plus loin, j'utilise une table BIDON et qui ne contient qu'un seul enregistrement.
Cela me permet d'écrire (et d'optimiser) ma requête ainsi :
Code : Tout sélectionner
select * from bidon
join famille on (famille.id=4)
join membre on (membre.famille_id = famille.id)
J'aimerai traduire cette requete avec Propel, pour récupérer une liste de membres.
Je peux tenter un :
Code : Tout sélectionner
$c = new Criteria();
$c->addJoin( BidonPeer::ID, FamillePeer::ID, Criteria::JOIN );
$c->addJoin( MembrePeer::FAMILLE_ID, FamillePeer::ID, Criteria::JOIN );
MembrePeer::doSelect($c);
Mais la requete générée ne ressemble pas à ma requete 'idéale'
Comment puis je obtenir ma requête 'optimisée' ?
L'étape la plus difficile est, je crois, de faire en sorte que la requete commence par "select * from bidon" alors que l'on veut remonter des 'membres' :
apparement, le fait de faire un MembrePeer::doSelect($c) impose que la requete commence par "select * from membres", ce qui m'emmerde...
Avez vous des idées ?
JC
Bonjour,
Je cherche à modifier l'ordre des jointures dans une requete générée par Propel
Voici la structure de ma base
[code]tableFAMILLE [ id, name ]
tableMEMBRE [ id, famille_id, name ]
tableBIDON [ id ][/code]
une requete, simple, me permettant de récupérer les membres d'une famille serait
[code]select * from famille, membre where membre.famille_id = famille.id and famille.id = 4[/code]
J'ai pris l'habitude d'écrire ce genre de requete ainsi (pour limiter le nombre de tuples traitées par la requete SQL) :
[code]select * from famille join membre on (membre.famille_id=famille.id and famille.id=4)[/code]
Pour aller encore plus loin, j'utilise une table BIDON et qui ne contient qu'un seul enregistrement.
Cela me permet d'écrire (et d'optimiser) ma requête ainsi :
[code]select * from bidon
join famille on (famille.id=4)
join membre on (membre.famille_id = famille.id)[/code]
J'aimerai traduire cette requete avec Propel, pour récupérer une liste de membres.
Je peux tenter un :
[code]$c = new Criteria();
$c->addJoin( BidonPeer::ID, FamillePeer::ID, Criteria::JOIN );
$c->addJoin( MembrePeer::FAMILLE_ID, FamillePeer::ID, Criteria::JOIN );
MembrePeer::doSelect($c);[/code]
Mais la requete générée ne ressemble pas à ma requete 'idéale'
Comment puis je obtenir ma requête 'optimisée' ?
L'étape la plus difficile est, je crois, de faire en sorte que la requete commence par "select * from bidon" alors que l'on veut remonter des 'membres' :
apparement, le fait de faire un MembrePeer::doSelect($c) impose que la requete commence par "select * from membres", ce qui m'emmerde...
Avez vous des idées ?
JC