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

Zend_Db PHP Discussion :

Requête compliquée en auto


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut Requête compliquée en auto
    Bonjour à tous,

    J'essaie de m'initier à ZF mais je dois commencer par quelque chose de ardue.

    En fait, je dois faire un formulaire de recherche avec des critères de divers tables.

    Que me conseillez vous pour construire facilement une requête ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Personnellement, pour les requêtes complexes, j'utilise un Zend_Db_Select. La construction d'une requête donne a peu près ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $select = $dbAdapter->select()
        ->distinct()
        ->from(array('t1' => 'table1'),
            array('T1ID' => 'id', 'T1C1' => 'champ1', 'T1C2' => 'champ2'))
        ->join(array('t2' => 'table2'),
            't1.id = t2.table1_id',
            array('T2ID' => 'id', 'T2C1' => 'champ1'))
        ->joinLeft(array('t3' => 'table3'),
            't2.id = t3.table2_id',
            array('T3C1' => 'champ1'))
        ->where('t1.champx = ?', $valeur)
        ->where('t2.champy != "chaîne"')
        ->order(array('t1.campz desc', 't2.champw'));
    Et après, ajouter des champs, supprimer des liens ou en ajouter, c'est vraiment très simple

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    Ok, je comprends bien ce que tu fais. Mais j'ai oublié de préciser le point "crucial".

    En fait, je pensais à la gestion des champs non renseignés.
    Imagine que les tables A, B et C sont liées comme ça : A - B - C

    Si les critères renseignés ne portent que sur A, tu ne vas pas faire de jointure avec B et C car c'est inutile et gourmand en ressource si les critères remontent trop de lignes de A.

    Après, si tu as des critères de A et C, il ne faut pas oublier les jointures avec B.

    Est ce qu'il n'y a pas une espèce de grande moulinette / méthode qui, à partir des Zend_Db_Tables et des critères, construirait facilement une requête ?

    J'avais déjà développé un truc de ce genre mais je n'en suis plus du tout satisfait.

  4. #4
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    ça ne pose pas de problèmes particuliers : tu testes la validité d'un critère avec empty() et si le test est positif tu ajoutes les tables liées avec Zend_Db_Select::join().
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    Je m'attendais à quelque chose de plus automatique ...
    Dans ce que tu as l'air de présenter, plus tu as de tables, plus ça fait de "if".

    Ex :
    S'il existe un critère de A, ajouter dans from : A
    S'il existe un critère de B, ajouter dans from : B et faire la jointure avec A s'il existe un critère de A
    S'il existe un critère de C, ajouter dans from : C et faire la jointure avec B s'il existe un critère de B ou critère de A, etc etc ...

    J'arrive pas à trouver ce genre d'"outil" et ça m'étonne ...
    L'idée est du coup de ne pas réécrire le code de la recherche si j'ajoute un critère sur une nouvelle table.

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par lionheart33806 Voir le message
    J'arrive pas à trouver ce genre d'"outil" et ça m'étonne ...
    Moi, pas trop.

    On parle de jointure, de quel type exactement ? Interne, externe, à gauche, à droite ? Et la condition de jointure ? naturelle, avec ON, USING, quel type d'opérateur ? SQL est trop riche pour envisager un outil complètement générique, il n'y a que les cas triviaux de jointure qui puissent éventuellement être inférés à partir d'une liste de champs, en utilisant le type d'algo que je t'ai mentionné. Zend_Db_Select est déjà assez perfectionné, il ne faut pas non plus en attendre des miracles.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour une requête compliquée
    Par Chekov dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/01/2008, 10h59
  2. [SQL 2005] Requête Compliquée
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/05/2006, 15h12
  3. besoin aide pour requête compliquée ......
    Par Ickou dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/04/2006, 17h43
  4. [SQL Server] Requête compliquée
    Par Cpt Anderson dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/01/2006, 14h24
  5. [PhpMySQL]Requête compliquée
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/04/2005, 21h54

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