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 :

Questions sur PDO et les jointures


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut Questions sur PDO et les jointures
    Bonjour à toutes et tous,

    J'ai un framework au sein duquel j'utilise l'objet PDO pour effectuer tout ce qui est requête SQL. J'aimerais améliorer ma méthode en "automatisant" la gestion des requêtes "multi-table". De manière générale j'utilise le LEFT JOIN dans mes SELECT.

    Voici un exemple de requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT users.*, profils.fields, userjoin.nom_jointure
    FROM pref_users AS users
    LEFT JOIN prefs_profils AS profils ON profils.uid = users.id
    LEFT JOIN pref_userjointures AS userjoin ON userjoin.uid = users.id

    J’exécute la requête avec PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pdo_q = $pdo->prepare($requete); //celle citée en exemple
    $pdo_q->execute($conditions);
    $donnees = (array) $pdo_q->fetch(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
    $pdo_q->closeCursor();
    et voici le contenu de l'array "$donnees" :

    array (size=16)
      'id' => string '1' (length=1)
      'username' => string 'micka' (length=9)
      'name' => string 'mickael' (length=7)
      'mail' => string 'mickael@laposte.net' (length=27)
      'state' => string '1' (length=1)
      'registration' => string '0' (length=1)
      'last_connection' => string '0' (length=1)
      'fields' => string '{}' (length=2)
      'nom_jointure' => string 'polo' (length=4)
    Alors j'ai deux questions qui auront tendance à se rejoindre :

    la 1ère : au niveau du tableau "donnees", y a t'il un moyen pour regrouper les champs par "tables" dans des sous-tableau ? j'ai fais des recherches au niveau des paramètres de la méthodes "fetch", au niveau d'autres méthodes de PDO, avec des GROUP BY... pas moyen.
    Je sais que le framework CakePHP le fait mais je n'arrive pas à voir comment.

    la 2ème : si jamais un des critères n'est pas respecté au niveau d'une des tables, comment faire pour que les données des autres tables soit tout de même retournées ??

    Merci d'avance pour votre aide et bonne journée!
    Si vous avez besoin d'une librairie permettant de gérer facilement les fichiers et les dossiers en PHP... ou si vous êtes juste curieux(se) :
    https://github.com/moDevsome/moFilesManager

    N'hésitez pas à me faire un retour

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour,

    Cake PHP effectue un lecture de la requête et stocke dans une structure dédiée, pour chaque colonne, sa position dans la requête, la table d'où elle sort si l'info est présente dans la requête (en clair si la projection est préfixée => select table1.col1, table2.col1 ... from table1 inner join table2 on ...), le nom de la colonne et son type. C'est en faisant appel à cette structure au moment du fetch que chacune des informations est remontée.

    Concernant la secon de partie de la question ... ben en fait SQL est fait exprès pour que ce genre de chose n'arrive pas. Il faut donc découper la requête et faire les jointures à la main (et c'est extrêmement contre-performant).

  3. #3
    Membre actif
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Points : 246
    Points
    246
    Par défaut
    Bonjour Olivier, merci pour la réponse

    Donc par rapport à la question 2 je vais en rester là, par contre par rapport à la question 1 j'aimerais avoir SVP une piste plus concrète, sachant que mes champs sont bien préfixés (users, profils, usersjoin...), comment est ce que je peu procéder pour obtenir le résultat voulus avec PDO ?

    Merci d'avance pour votre aide.
    Si vous avez besoin d'une librairie permettant de gérer facilement les fichiers et les dossiers en PHP... ou si vous êtes juste curieux(se) :
    https://github.com/moDevsome/moFilesManager

    N'hésitez pas à me faire un retour

Discussions similaires

  1. [XL-2010] Question sur Excel et les "Array-Entered Formulas" avec accolades
    Par balteo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/08/2010, 19h33
  2. Question sur vista et les Exe
    Par restesouple dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/11/2007, 14h57
  3. [Java] Question sur Java et les états.
    Par Cassios dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 19/02/2007, 17h37
  4. [VBA-E]Encore une question sur csv et les dates
    Par vovor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/10/2006, 10h43
  5. Question sur exports et les classes (pour une dll)
    Par DjPoke dans le forum Langage
    Réponses: 7
    Dernier message: 08/08/2005, 19h25

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