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 imbriquée - foreach : Afficher plusieurs colonnes


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut Boucle imbriquée - foreach : Afficher plusieurs colonnes
    Bonjour tout le monde,

    Sur une boucle imbriquée, je souhaiterais afficher les éléments de plusieurs colonnes d'une même ligne.
    J'ai parcouru différents sujets qui parle de cela mais sans grand succès.

    Voici la structure simplifiée de mes tables :

    Table EQUIPE

    id nom logo
    1 Equipe1 logo1.jpg
    2 Equipe2 logo2.jpg
    3 Equipe3 logo3.jpg

    Table RESULTAT

    id_equipe annee position
    1 2015 10è
    1 2016
    1 2017
    2 2013 16è
    2 2014 14è
    3 2017

    J'arrive à isoler le nom de l'équipe dans une boucle imbriquée pour un résultat comme ceci :

    Equipe1
    2015 | 10è
    2016 | 5è
    2017 | 8è
    Equipe2
    2013 | 16è
    2014 | 14è
    Equipe3
    2017 | 2è
    Ce que je souhaiterais afficher c'est également le logo à côté du nom de l'équipe.
    Voici la partie de mon code qui pose souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    *** REQUETE ***
    $data=array();
    while ($results = mysql_fetch_assoc($aff_resultat)) {
     $data[$results['nom']][]=$results;
     $data[$results['logo']][]=$results;
    }
    foreach( $data as $equipe=>$items ){
      $tpl->assign_block_vars('liste_equipe', array(
            'NOM'    => $equipe,
    	'LOGO' => $equipe,
        ));
     
    *** FOREACH POUR LE SECOND BLOC ***
    Côté HTML, j'ai ce résultat :

    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
    17
    18
    Equipe1 <img src="Equipe1" />
    2015 | 10è
    2016 | 5è
    2017 | 8è
    logo1.jpg <img src="logo1.jpg" />
    2015 | 10è
    2016 | 5è
    2017 | 8è
    Equipe2 <img src="Equipe2" />
    2013 | 16è
    2014 | 14è
    logo2.jpg <img src="logo2.jpg" />
    2013 | 16è
    2014 | 14è
    Equipe3 <img src="Equipe3" />
    2017 | 2è
    logo3.jpg <img src="logo3.jpg" />
    2017 | 2è
    Pouvez-vous me dire quelle est mon erreur ?
    Merci d'avance !

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Si les données provient de deux tables mysql, tu peux récupérer ce que tu veux en utilisant une jointure mysql au lieu de la boucle.

    Elle retourne quoi cette requête dans phpmyadmin ? :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select id,nom,annee,position,logo from equipe 
    inner join resultat on (resultat.id_equipe=equipe.id)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Ce que je souhaite, c'est avoir une seule fois le nom de l'équipe et en dessous les lignes de résultats qui lui correspondent.
    Avec seulement une jointure, j'aurai le nom de l'équipe sur chaque ligne de résultats ?

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Il suffit d'ordonner les résultats en fonction de l'id de l'équipe (dans la requête SQL) et d'afficher le nom de l'équipe lorsque l'id de l'équipe change dans la boucle (ce qui se contrôle avec une condition if).
    Au passage, je ne vois pas l'intérêt de mettre un "è" à la fin de chaque position, mieux vaut juste stocker un entier dans la base, et laisser ce genre de subtilités à l'affichage. NB: en français, l'abréviation des nombres ordinaux s'écrit comme suit: 1er (ou 1ère au féminin), 2nd (ou 2nde au féminin) ou (2e pour deuxième donc aussi bien au féminin qu'au masculin), puis 3e, 4e, 5e, etc. (source édifiante: règles typographiques en usage à l'imprimerie nationale).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Bonjour CosmoKnacki,

    J'avoue que je ne vois pas trop comment faire ce que tu me dis...
    J'aurai aimé savoir dans mon code ce que je fais de faux pour comprendre.

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Déjà utilise une jointure comme Toufik83 te l'a suggéré, et ajoute une clause ORDER BY de manière à obtenir les résultats classés par id d'équipe (ou par nom d'équipe si tu préfères, ça n'a pas d'importance tant que deux équipes ne portent pas le même nom) puis par année:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id_equipe, nom, annee, position, logo 
    FROM resultat r
    INNER JOIN equipe e
      ON r.id_equipe = e.id
    ORDER BY e.id, annee

    Donc effectivement pour chaque ligne de résultat de ta requête, tu obtiendras en plus de l'année et de la position, le nom, l'id et le logo de l'équipe, mais ce n'est pas grave, ça ne t'oblige pas à les afficher pour autant à chaque fois. Il faut juste afficher le nom et le logo quand ceux-ci changent. Par exemple comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $id_equipe = '';
     
    $data=array();
     
    while ($results = mysql_fetch_assoc($aff_resultat)) {
        if ( $id_equipe !== $result['id_equipe'] ) {
            $id_equipe = $result['id_equipe'];
            // là tu affiches le nom de l'équipe puis son logo
        }
     
        // là tu affiches l'année et la position
    }

    Grâce à ce test if l'affichage du nom de l'équipe et du logo n'aura lieu que lorsque l'id de l'équipe changera. Donc utiliser des boucles imbriquées n'est pas nécessaire.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. afficher plusieur colonnes sur un combobox
    Par melek_net dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/04/2007, 19h39
  2. Afficher plusieur colonnes sur une seule colonne ?
    Par Interruption13h dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h57
  3. Réponses: 12
    Dernier message: 23/01/2007, 19h07
  4. Afficher plusieurs colonnes dans une ListBox
    Par codial dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 12h48
  5. [VB.Net 2005]Afficher plusieurs colonnes dans un listbox
    Par DonF dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/11/2006, 19h26

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