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 :

Listing des entrées d'une table fille depuis listing table mère


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Listing des entrées d'une table fille depuis listing table mère
    Bonjour, et merci pour votre lecture
    Je vous pose cette question car je suis souvent confronté a ce cas de figure.

    Quelle est la meilleure solution selon vous pour afficher les résultats d'une table fille pour chaque entrée de la table mère par ex :

    Table mère
    id --- champ1---champ2---

    Table fille
    id --- id_table_mére---champ_table_fille

    Et générer à partir de ces résultats par ex:
    ->Enregistrement table mère n°1
    - enregistrement table fille n°1
    - enregistrement table fille n°2
    ->Enregistrement table mère n°2
    - enregistrement table fille n°1
    - enregistrement table fille n°2
    - enregistrement table fille n°3
    etc..

    Personnellement, je stock et classe d'abord les resultats de la table fille dans un array (php ou autre) puis j'exécute une fonction qui boucle sur ce tableau pour chacune des entrée de la table mère.

    Pour avoir une idée, après avoir constitué mes tableaux ça donne ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     while (resultats de la requete mère) {
          ->affichage des champs table mère
          recupereListingFille(id_table_mère_en_cours)
    }
    Mais est ce vraiment la meilleure solution à adopter....??Y'a t-il des solutions alternative et qui conservent un bon niveau de performance?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut


    Tu fais une requête avec une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ...
    FROM table_mere M
      INNER JOIN table_fille F ON F.id_mere = M.id
    ORDER BY M.Nom, F.Nom
    ensuite, tu traites le tout sans imbriquer de boucles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $old_id = 0 ;
    while(resultat de la requête) {
      if ($id_mere == $old_id) {affichage de l'enreg de la table-mère}
      $old_id = $id_mere ;
      affichage de l'enreg de la table-fille ;
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    oki merci beaucoup.
    J'avais pensé à ce genre de solution, mais a tord alors je pensais que sur des grosses bases avec beaucoup de lignes et beaucoup de table fille ça pouvait vite devenir fastidieux.

    ET n'y à t'il pas des possibilités de "string agregat" comme j'entends parler pour Oracle?

    Merci.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Le principe général est que les SGBD sont optimisés pour traiter de gros volumes de données. Donc faire une grosse requête est toujours plus efficace que faire plein de petites requêtes (ce qui revient à rouler en première sur une autoroute).

    Pour ce qui est des "string agrégats", je n'ai aucune idée de ce que c'est, mais je te suggère de me montrer un exemple...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Re-bonjour,
    Je m'excuse de ne pas avoir répondu plus tôt...
    Merci pour tes réponses
    En ce qui concerne le "string agregat" j'avais lu le contenu de ce lien entre les lignes...après une lecture plus attentive je me rend compte que je n'avais rien compris de ce que c'était...http://www.oracle-base.com/articles/...Techniques.php

    Pour revenir à ce que tu me disais sur l'affichage des tables filles dans un listing. Je comprends qu'il est plus judicieux de faire une seule grosse requête kit à générer une grande quantité de répétition sur les champs des tables mères.

    Ce qui me parait "fastidieux" c'est la manière de filtrer les informations pour les afficher correctement.
    Imaginons une table mère qui possède une DIZAINE de table filles, imaginons que l'on veuille afficher le résultat dans un tableau. Chaque ligne du tableau représente une ligne de la table mère et à l'intérieur des cellules la liste des entrée des champs des tables filles un peu comme cela par ex :


    CA fait beaucoup de combinaison possible beaucoup de condition et de variable a déclarer non? Est ce qu'il n'est pas plus pratique de les arranger d'abord dans un tableau du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $array[categorie][id_table_mere][table_fille1][champ1]
    $array[categorie][id_table_mere][table_fille1][champ2]
    $array[categorie][id_table_mere][table_fille2][champ1]
    $array[categorie][id_table_mere][table_fille2][champ2]
    Une fois ce gros tableau fait d'aller chercher nos informations tranquillement dans ce tableau???

    N'est ce pas une bonne méthode?

    MErci beaucoup pour tes conseils.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Peux-tu préciser ton modèle de données (avec juste trois ou quatre tables) et quelques exemples ? ça sera plus facile de te répondre sur un exemple.

    Par ailleurs, la string aggregation est traitée très simplement en MySQL, par la fonction ad hoc GROUP_CONCAT().

Discussions similaires

  1. comment obtenir la liste des champs d'une table
    Par richard038 dans le forum SQL
    Réponses: 4
    Dernier message: 13/02/2009, 18h28
  2. liste des descendants dans une table hiérarchique
    Par dingoth dans le forum Administration
    Réponses: 4
    Dernier message: 02/11/2008, 20h36
  3. Accèder à une classe fille depuis la classe mère
    Par Phreak0x dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/10/2008, 10h14
  4. Récupérer la liste des champs d'une table
    Par mister3957 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/04/2007, 14h56
  5. Liste des contraintes d'une table
    Par lalyly dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2006, 11h23

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