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 :

Boucle sur requête JOIN et doublons [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Points : 69
    Points
    69
    Par défaut Boucle sur requête JOIN et doublons
    Bonjour,

    J'ai une base mysql avec deux tables : 'auteurs' et 'livres'. La première contient pour chaque auteur son identifiant, son nom et sa nationalité. La seconde contient pour chaque livre son identifiant, l'identifiant de son auteur, et son titre.

    Je veux afficher les noms et nationalités des auteurs dans une liste principale, et sous chaque auteur afficher une sous-liste avec les titres de ses livres.

    Je fais donc la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM livres JOIN auteurs ON livres.auteur_id = auteurs.auteur_id"
    et je l'affiche ainsi (pour tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($row = $req->fetch(PDO::FETCH_OBJ))
    {
    	foreach($row as $key=> $val)
    	{
    		echo $key,' => ', $val,'<br />';
    	}
    }
    Comment faire pour que les noms et nationalités des auteurs n'apparaissent qu'une seule fois, et ne soient pas répétés pour chaque livre?

    Y a-t-il un moyen de le faire directement dans la requête?


    Merci d'avance de votre aide!

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <ul>
    <?
    $auteur = '';
    while ($row = $req->fetch(PDO::FETCH_ASSOC))
    {
        if($auteur != $row['nom']){ 
    		if($auteur != ''){
    			echo '</ul></li>';
    		}
    		echo '<li>'.$row['nom'].' ('.$row['nationalite'].')<ul>';
    		$auteur = $row['nom'];
    	}
    	echo '<li>'.$row['titre'].'</li>';
    }
    ?>
    </ul></li></ul>

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par gambic Voir le message
    Comment faire pour que les noms et nationalités des auteurs n'apparaissent qu'une seule fois, et ne soient pas répétés pour chaque livre?
    Y'a pas 36 solutions: soit tu veux tous les noms (et nationalités) d'auteurs ayant publié des livres: à ce moment tu fais un GROUP BY mais tu perds les infos sur les livres.
    Soit tu veux la liste des livres avec leurs auteurs à ce moment tu réccupère systématiquement le nom (et la nationalité) avec.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Points : 69
    Points
    69
    Par défaut GROUP_CONCAT
    Sinon il y a GROUP_CONCAT qui permet de concaténer dans une chaîne tous les livres de chaque auteur.

    Mais finalement j'ai opté pour l'astuce php de vorace (j'ai juste remplacé $row['nom'] par $row->nom pour que ça fonctionne).

    Merci à tous les deux.

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

Discussions similaires

  1. [AC-2007] Boucles sur requêtes
    Par Vhalar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/08/2011, 10h33
  2. [MySQL] 2 boucles sur une requête, pourquoi ça marche pas?
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2007, 12h32
  3. requête qui boucle sur une autre requête
    Par super_dz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2006, 20h02
  4. Doublons sur requête
    Par NoBru dans le forum Access
    Réponses: 9
    Dernier message: 18/03/2006, 07h00
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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