requete particulière avec Propel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requete particulière avec Propel

Re: requete particulière avec Propel

par jcmartin01 » 08 déc. 2010, 13:52

J'ai réussi à avancer un peu. On peut obtenir

Code : Tout sélectionner

SELECT * FROM bidon JOIN famille ON (4=famille.ID)
en procédant ainsi :

Code : Tout sélectionner

$c=new Criteria(); $c->addJoin(4, FamillePeer::ID, ' bidon'.Criteria::JOIN); FamillePeer::doSelect($c)
Mais quand je rajoute les membres :

Code : Tout sélectionner

$c->addJoin(MembresPeer::FAMILLE_ID, FamillePeer::ID);
ca re-marche-pas, la requete devient

Code : Tout sélectionner

select * from membres bidon join famille.....
Si vous trouvez plus vite que moi...

requete particulière avec Propel

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