IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requete particulière avec Propel


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut requete particulière avec Propel
    Bonjour,
    Je cherche à modifier l'ordre des jointures dans une requete générée par Propel
    Voici la structure de ma base

    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

    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) :

    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 :

    select * from bidon
    join famille on (famille.id=4)
    join membre on (membre.famille_id = famille.id)
    J'aimerais traduire cette requete avec Propel, pour récupérer une liste de membres.
    Je peux tenter un :

    $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

  2. #2
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    J'ai réussi à avancer un peu. On peut obtenir

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

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

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

    select * from membres bidon join famille.....

    Si vous trouvez plus vite que moi...

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    je continue à me répondre

    Il suffit d'appliquer le meme principe qui consiste à mettre une constante (ou une chaine VUE comme une constante par Propel) en premier parametre du addJoin

    ainsi, au lieu d'écrire

    $c->addJoin(MembresPeer::FAMILLE_ID, FamillePeer::ID);
    on écrit

    $c->addJoin("membres.famille_id", FamillePeer::ID, Criteria::JOIN);
    et on obtient la requete que je souhaitais obtenir

    Je vais reformuler ma question du coup :

    est il possible de faire qq chose de ce style :

    $sql = "select * from blablabala";
    MembresPeer::doSelect($sql);
    (une CUSTOM QUERY quoi, il me semble avoir déjà lu des choses sur ce sujet)
    Merci de vos réponses si vous trouvez...

Discussions similaires

  1. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05
  2. Date nulle dans une requete paramétrée avec TParameter
    Par denrette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2004, 08h37
  3. requete select avec AS remplacement de valeur
    Par pi3141563 dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/04/2004, 22h15
  4. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo