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 :

Affichage de données et count


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut Affichage de données et count
    Bonsoir,
    Je fais appel à vous car je n'arrive pas à m'en sortir avec mon code.
    J'ai fait une petite bdd de test en vue d'un projet.
    Il y a des membres qui pratiquent 1 ou 2 sports maxi au sein d'une équipe.
    Chaque sport dépend d'une fédération.
    Chaque membre a un statut : abonné ou temporaire.

    Je souhaiterais afficher les membres qui pratiquent un sport par fédération.
    Par ex. afficher : dans la fédération de tennis, il y a X membres qui font (aussi) du foot.
    Et ceci pour toutes les fédérations.

    Je récupère bien toutes les données de ma bdd mais je n'arrive pas à afficher en php.

    Tous les print_r sur les variables affichent 1.
    Dans le fichier log j'ai le message d'erreur : PHP Warning: count(): Parameter must be an array or an object that implements Countable in /Applications/MAMP/htdocs/traces_membres/tab_equipes_req_foot.php on line 40.
    Cette ligne =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbreFFF = count($ID_membre);
    Je vous remercie par avance si vous pouviez me mettre sur la bonne piste.
    Evelyne

    Mon code :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    //requête foot par fédération
    $resultat = $base->query('SELECT
        m.`ID_membre`,
        s.`ID_statut`,
        ame.`ID_membre`,
        ame.`ID_equipe1`,
        ame.`ID_equipe2`,
        e.`code_equipe`,
        f.`ID_federation`,
        f.`sigle_federation`
    FROM 
        MEMBRE m, STATUT s, AS_MEMBRE_EQUIPE ame, EQUIPE e, FEDERATION f   
    WHERE
        e.`code_equipe` = "FOO" AND (ame.`ID_equipe1` = e.`ID_equipe` OR ame.`ID_equipe2` = e.`ID_equipe`)
        AND ame.`ID_membre` = m.`ID_membre`
        AND m.`ID_statut` = s.`ID_statut`
        AND (s.`ID_statut` = 1 OR 2)
        AND s.`ID_federation` = f.`ID_federation`   
    ') or die($mysqli->error.__LINE__);
     
    	while($donnees = $resultat->fetch())
    	{
     
    	$federation = $donnees['ID_federation'];
    	$statut = $donnees['ID_statut'];
    	$ID_membre = $donnees['ID_membre'];
     
                if (($federation == 2) AND ($statut == 1 OR 2))
                // ID 2 = fédération de tennis
                {             	
    				/*echo "federations : ";
    				print_r($federation);
    				echo "<br> statut : ";
    				print_r($statut);
    				echo "<br> ID des membres : ";
    				print_r($ID_membre);
    				echo "<br>";*/
     
    				$nbreFFF = count($ID_membre);
    				/*echo "print r nombre FFF : ";
    				print_r($nbreFFF);
    				echo "<br><br>";*/				                 		
    			}
    	}		
    ?>

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Par défaut
    Bonjour
    ce serait pas mieux de faire des
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      FROM ".TBL." t 
      LEFT JOIN ".TBL_CAT." c 
        ON t.categ= c.id 
      LEFT JOIN ".TBL_CHOIX." x 
        ON t.choix= x.id
    avec un select DISTINCT pour éviter les doublons

    Mon exemple provient de l'un des mes scripts, à toi de l'adapter...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Evelyne

    1- resus a raison :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM 
        MEMBRE m, STATUT s, AS_MEMBRE_EQUIPE ame, EQUIPE e, FEDERATION f


    il faut utiliser des JOINTURES !
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FROM 
        MEMBRE m
        INNER JOIN STATUT s ON ...........................
        INNER JOIN AS_MEMBRE_EQUIPE ame ON ...........................
        INNER JOIN EQUIPE e ON ...........................
        INNER JOIN FEDERATION f ON ...........................

    2-
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    (s.`ID_statut` = 1 OR 2)
    Je doute que cette syntaxe soit correcte...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    (s.`ID_statut` = 1 OR s.`ID_statut` = 2)
    ou :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    (s.`ID_statut` IN (1,2))

    3- Idem en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($statut == 1 OR $statut == 2)
    Dernière modification par Invité ; 30/04/2020 à 11h58.

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Bonjour resus et jreaux62,
    Merci pour vos réponses. Il me semblait bien que je prenais tout à l'envers Je teste ça au plus vite.
    Très bonne journée,
    Evelyne

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Me revoici après bien des tests...
    J'ai repris la requête avec les jointures, c'est beaucoup plus clair, merci beaucoup. J'ai vérifié dans phpmyadmin, j'obtiens exactement ce que je souhaite : tous les membres qui font du foot dans chacune des fédérations.

    Par contre, je bute toujours pour l'affichage sur la page php avec count et je ne comprends pas pourquoi.

    Dans l'exemple ci-dessous, je veux compter le nombre d'ID_membre (donc le nombre de membres) qui dans la fédération de tennis jouent au foot (ensuite je ferai la même chose pour chaque fédération).

    Pour cela, avec while je mets le résultat de la requête dans un tableau avec fetch() et je demande ensuite pour la fédération ID == 2 (tennis) un count des membres.

    - sur ma page php, il est affiché en résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbreFFT = count($ID_membre);
    : 1 or il y a 2 membres.

    - une erreur est retournée dans le fichier log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [30-Apr-2020 15:32:30 UTC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /Applications/MAMP/htdocs/traces_membres/tab_equipes_req_foot.php on line 28
    Cela doit être simple mais je cale. Merci par avance de bien vouloir m'aiguiller sur la bonne voie.
    Evelyne

    Ce que j'ai fait pour la requête :
    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
    $resultat = $base->query('SELECT
        m.`ID_membre`,
        s.`ID_statut`,
        ame.`ID_equipe1`,
        ame.`ID_equipe2`,
        e.`ID_equipe`,
        e.`code_equipe`,
        f.`ID_federation`,
        f.`sigle_federation`
    FROM 
        MEMBRE m
        INNER JOIN STATUT s ON m.`ID_statut` = s.`ID_statut`
        INNER JOIN AS_MEMBRE_EQUIPE ame ON ame.`ID_membre` = m.`ID_membre`
        INNER JOIN EQUIPE e ON e.`ID_equipe` = 1 AND (ame.`ID_equipe1` = e.`ID_equipe` OR ame.`ID_equipe2` = e.`ID_equipe`)
        INNER JOIN FEDERATION f ON f.`ID_federation` = s.`ID_federation`      
    ') or die($mysqli->error.__LINE__);
    Ce que je fais pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while($donnees = $resultat->fetch())
    	{	
    	$federation = $donnees['ID_federation'];	
    	$ID_membre = $donnees['ID_membre'];
     
                if ($federation == 2)
                {             	
    		$nbreFFT = count($ID_membre);
    		echo "fédérations tennis : ";
    		print_r($nbreFFT);			                 		
    	    }
            }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il manque des infos, notamment sur la STRUCTURE des TABLES SQL, et leurs jointures.

    Question :
    • quand un membre pratique plusieurs sport, ça se traduit comment dans la base de données ?
      montre un exemple.

  7. #7
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Dans la bdd j'ai une table EQUIPE qui stocke les ID des sports pratiqués. Elle n'est pas reliée à d'autres tables, elle sert à alimenter le menu déroulant d'un formulaire.

    Chaque membre pratique au moins 1 sport et au maximum 2. Les ID de ces sports, après traitement du formulaire, sont stockés dans la table AS_MEMBRE_EQUIPE.

    (Pour + tard : dans cette table il y a aussi les % d'activité pour les 2 sports. Ils seront additionnés.)

    Voici le diagramme de la bdd. Merci par avance.
    Evelyne

    Nom : diag_FEDERATIONS.png
Affichages : 241
Taille : 73,5 Ko

  8. #8
    Invité
    Invité(e)
    Par défaut
    1-
    ...Les ID de ces sports, après traitement du formulaire, sont stockés dans la table AS_MEMBRE_EQUIPE...
    OK, mais comment chaque sport est relié à sa fédération ?

    De plus, ID_equipe1, ID_equipe2 : ça limite donc à 2 "équipes".
    Si le membre fait un 3ème sport, ça se passe comment ?

    A mon avis, il y a ici une grosse erreur de CONCEPTION.


    2- A quoi sert la table "STATUT" ?
    J'ai du mal à comprendre les relations entre tes tables...
    Dernière modification par Invité ; 30/04/2020 à 19h13.

  9. #9
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Désolée, le lien entre un membre et 1 ou 2 sport se fait dans la table AS_MEMBRE_EQUIPE où sont stockés les ID des membres et les ID du ou des sports qu'il pratique (ID_equipe1 et ID_equipe2). ID_equipe2 peut être NULL.

    La table STATUT correspond, pour chaque fédération à "abonné" ou "temporaire". Le statut servira ultérieurement pour les %. Les % serviront à calculer une subvention qui ne sera pas la même si le membre est abonné ou temporaire.

    J'espère avoir répondu à tout cette fois-ci et te remercie.
    Evelyne

  10. #10
    Invité
    Invité(e)
    Par défaut
    1- C'est ce que je disais : table "AS_MEMBRE_EQUIPE" est mal conçue.

    Elle devrait contenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID_membre
    ID_equipe
    pourcentage
    Par conséquent, un membre qui pratique PLUSIEURS sports (2 ou PLUS) sera enregistré sur PLUSIEURS lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 13 x(%)
    1 24 y(%)
    ...
    2- Il manque (à mon avis), une autre TABLE SQL, qui fait le lien entre :
    • sport (équipe ?)
    • fédération


    3- Concernant la table "STATUT", je ne comprends pas...
    C'est le membre qui a un statut "abonné" ou "temporaire" ?

    Mais il n'a pas forcément cet unique statut pour tous les sports qu'il pratique, si ?

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Par défaut
    Dans la requete je n'ai pas vu un GROUP BY à la fin
    Cela permettrait d'avoir directement le nombre sans passer par PHP
    Il te suffit au début de la requete de completer avec un COUNT(*) AS nombre pour atteindre ton objectif
    C'est ce que je ferai pour voir!

  12. #12
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Merci, je voyais bien qu'il y avait quelque chose de bancal.

    1 - je reprends la table "AS_MEMBRE_EQUIPE" selon tes indications

    2 - je n'ai pas fait de table qui lierait sport et fédération car un sport dépend d'une fédération et d'une seule

    3 - oui c'est le membre qui a un statut abonné ou temporaire. Ce statut peut être différent pour chacun des 2 sports pratiqués.

    Je reviens après modification de la table.
    Evelyne

  13. #13
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Merci resus,
    Je ne peux pas passer par GROUP BY et COUNT dans la requête car je récupère toutes les fédérations. J'aurais alors le nombre total de membres de la bdd.
    Cela dit, je teste pour voir.
    Evelyne

  14. #14
    Invité
    Invité(e)
    Par défaut
    2 - je n'ai pas fait de table qui lierait sport et fédération car un sport dépend d'une fédération et d'une seule
    TOI, tu le sais. Mais le programme ne le sait pas !
    Chaque "SPORT" doit être clairement relié à SA "FEDERATION".

    Il faut, au minimum, un ID_federation dans la table des SPORTS (table EQUIPE ? EQUIPE = SPORT ? -> là non plus, je ne comprends pas)


    3 - oui c'est le membre qui a un statut abonné ou temporaire. Ce statut peut être différent pour chacun des 2 sports pratiqués.
    OK.
    Alors, c'est dans la table "AS_MEMBRE_EQUIPE" que doit être indiqué de STATUT du membre :
    • ID_membre
    • ID_equipe
    • pourcentage
    • ID_statut

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je peux me tromper, mais il me semble que la bonne STRUCTURE des tables et les RELATIONS sont :

    Nom : diag_FEDERATIONS-2.png
Affichages : 226
Taille : 77,2 Ko

  16. #16
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Pour resus : j'ai testé pour voir la solution que tu me proposais. J'ai un message d'erreur sur la syntaxe. Je poste ci-dessous le code de ma requête. Je veux bien STP connaître la bonne syntaxe. J'ai cherché sur plusieurs sites et je ne vois pas où est mon erreur ?
    Merci par avance.
    Evelyne

    Code SQL : 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
    SELECT COUNT(ID_membre)
        m.`ID_membre`,
        s.`ID_statut`,
        ame.`ID_equipe1`,
        ame.`ID_equipe2`,
        e.`ID_equipe`,
        e.`code_equipe`,
        f.`ID_federation`,
        f.`sigle_federation`
    FROM 
        MEMBRE m
    	INNER JOIN STATUT s ON m.`ID_statut` = s.`ID_statut`
        INNER JOIN AS_MEMBRE_EQUIPE ame ON ame.`ID_membre` = m.`ID_membre`
        INNER JOIN EQUIPE e ON e.`ID_equipe` = 1 AND (ame.`ID_equipe1` = e.`ID_equipe` OR ame.`ID_equipe2` = e.`ID_equipe`)
        INNER JOIN FEDERATION f ON f.`ID_federation` = s.`ID_federation`
    GROUP BY ID_federation

  17. #17
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    pour jreaux62 : non, je ne pense pas que tu te trompes, c'est sûrement moi .
    Je te remercie d'avoir pris le temps de revoir mon diagramme.
    Ce soir je reprends tout selon tes indications, ce sera sûrement plus clair et plus simple.
    Merci beaucoup.
    Evelyne

  18. #18
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Bonsoir,
    Me revoilà ! J'ai repris toute la bdd selon le diagramme et réinséré les données (pas triste).
    J'ai refait la requête (re-pas triste).
    C'est nickel
    Malheureusement l'affichage php résiste encore.
    La ligne est correcte car quand je modifie l'ID de la fédération j'ai bien les données correspondantes.
    Par contre, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbreFFT = count($ID_membre);
    n'est pas correcte et je ne comprends pas ?
    Par ex., pour la fédération ID 2 "tennis" il y a 6 personnes qui pratiquent le tennis. Il s'affiche 6 fois : "fédérations tennis : 1". Or ce que je souhaiterais c'est "fédération tennis : 6".
    L'erreur du fichier log indique 6 fois (au moins le compte est bon !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PHP Warning:  count(): Parameter must be an array or an object that implements Countable .....on line 28
    La ligne 28 c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbreFFT = count($ID_membre);
    Je pense que le problème vient du WHILE mais je ne vois pas ? Les données sont bien dans un array ? Je mets le code complet ci-dessous.
    Je vous remercie par avance si vous pouviez regarder où se trouve mon erreur. Je m'arrête là pour ce soir.
    Evelyne

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    $resultat = $base->query('SELECT
        ame.`ID_membre`,
        ame.`ID_equipe`,
        ame.`ID_statut`,
        ame.`pourcentage`,
        f.`ID_federation`,
        e.`ID_equipe`,
        s.`ID_statut`,
        m.`ID_membre`
    FROM 
        AS_MEMBRE_EQUIPE ame
    	INNER JOIN STATUT s ON s.`ID_statut` = ame.`ID_statut` 
        INNER JOIN MEMBRE m ON ame.`ID_membre` = m.`ID_membre`
        INNER JOIN EQUIPE e ON e.`ID_equipe` = ame.`ID_equipe`
        INNER JOIN FEDERATION f ON f.`ID_federation` = e.`ID_federation`    
    ') or die($mysqli->error.__LINE__);
     
    	while($donnees = $resultat->fetch())
    	{
     
    	$federation = $donnees['ID_federation'];	
    	$ID_membre = $donnees['ID_membre'];
     
                if ($federation == 2)
                {             	
    				$nbreFFT = count($ID_membre);
    				echo "fédérations tennis : ";
    				echo $nbreFFT;			                 		
    			}			
    	}		
    ?>

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour Évelyne,

    on a du pain sur la planche !

    1- d'abord, je t'explique pourquoi ce que tu fais ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while($donnees = ...............)
    {
    ...
    	$ID_membre = $donnees['ID_membre'];
     
                if ($federation == 2)
                {             	
    		$nbreFFT = count($ID_membre);
    		echo "fédérations tennis : ";
    		echo $nbreFFT;
    • Comme on le voit, on est A L’INTÉRIEUR de la boucle (while)
    • $ID_membre n'est PAS un array, mais juste.... l'ID du membre ! (une variable simple)
    • count($ID_membre) ne peut donc pas fonctionner (et c'est le message d'erreur que tu obtiens)
    • echo $nbreFFT; : tu essaies d'afficher un "résultat final" A L’INTÉRIEUR de la boucle, alors qu'il faut attendre LA FIN de cette boucle !

    Bref : RIEN ne va.


    2- Alors, "comment s'y prendre ?", me diras-tu.
    Je te remercie pour cette pertinente question.

    • Déjà, il faut savoir ce qu'on veut récupérer, et afficher.
    • On définira alors les variables et/ou array à créer pour y stocker ce qu'on veut récupérer
    • Ensuite, on fera les actions nécessaires A L’INTÉRIEUR de la boucle (while) -> en incrémentant un ou des compteurs, ou array (par exemple)
    • Enfin, APRÈS la boucle, on affichera les résultats



    3- Le fait est qu'on a ici PLUSIEURS problématiques / types de résultats à afficher.
    On va les traiter UN à la fois, pour plus de clarté.


    1ère problématique :
    3A- Afficher la liste des membres, par fédération
    A- Je souhaiterais afficher les membres qui pratiquent un sport par fédération.
    Ça, c'est le plus simple et le plus basique, et tu sais déjà le faire.

    Dans la requête, on va juste rajouter le nom du membre et le nom de la fédération, et on va GROUPER ORDONNER PAR fédération (GROUP BY ORDER BY) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $resultat = $base->query('SELECT
        ame.`NOM_membre`,
        f.`NOM_federation`,
    ...
        ORDER BY f.`NOM_federation`ASC
    ') or die($mysqli->error.__LINE__);
    Le code :
    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
    19
    20
    21
    <?php
    $ID_federation_current = '';
     
    while($donnees = $resultat->fetch())
    {
    	// On affiche le NOM de la fédération (UNE seule fois)
    	$ID_federation = $donnees['ID_federation'];
    	if( $ID_federation != $ID_federation_current )
    	{
    		$ID_federation_current = $ID_federation;
    		$nom_federation = htmlspecialchars($donnees['nom_federation']);
    		echo '<h4>'.$nom_federation.'</h4>';
    		echo '<h5>Membres</h5>';
    	}
     
    	// on affiche le membre
    	$ID_membre = $donnees['ID_membre'];
    	$NOM_membre = htmlspecialchars($donnees['nom'].' '.$donnees['prenom']);
    	echo '<p>'.$ID_membre.' : '.$NOM_membre.'</p>';
     
    }
    Remarque :
    • Là, j'ai volontairement simplifié l'affichage.
    • En pratique, on affichera plutôt ces données dans une <table>.


    -> ESSAIE déjà ce code, et vérifie que tu obtiens bien toutes tes données.

    LA SUITE dans mon prochain message
    Dernière modification par Invité ; 01/05/2020 à 11h34.

  20. #20
    Invité
    Invité(e)
    Par défaut
    2ème problématique : (il y en aura une 3ème APRÈS)
    3B- compter le nombre de membres, par fédération

    Toujours avec la même requête SQL :
    • on va initialiser un array $mbre_par_fede
    • en INDICE : NOM_federation
    • en VALEUR : chaque ID_membre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $mbre_par_fede_array = []; // array
     
    while($donnees = $resultat->fetch())
    {
    	// On ajoute l'ID_membre dans l'array, dont l'INDICE est nom_federation
    	$mbre_par_fede_array[$donnees['nom_federation']][] = $donnees['ID_membre'];
    }
    // Affichage APRÈS la boucle
    foreach( $mbre_par_fede_array as $nom_fede => $ids_mbre_array )
    {
    	echo '<p>'.htmlspecialchars($nom_fede).' : '.count($ids_mbre_array).' membres</p>';
    }
    Là aussi, je te laisse TESTER.

    Peux-tu MONTRER ce que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump( $mbre_par_fede_array );
    ?


    3ème problématique :
    3C- par fédération, compter le nombre de membres qui pratiquent un AUTRE sport, par sport

    Alors là, c'est déjà moins évident...
    Pour chaque fédération, on doit trouver et compter les membres (ID_membre) présent dans d'autres fédérations.

    Il va certainement falloir utiliser des fonctions comme array_intersect() ou autres...

    ... je suis en train d'y réfléchir...
    Dernière modification par Invité ; 01/05/2020 à 11h33.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. COUNT et affichage des données de la même colonne
    Par dany13 dans le forum Développement
    Réponses: 9
    Dernier message: 09/12/2009, 18h31
  2. TDBCtrlGrid - Affichage des données
    Par audreyb dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/10/2004, 13h10
  3. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07
  4. Affichage de données (histograme, graphe etc.)
    Par sunshine33 dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/01/2004, 14h16
  5. PB : affichage de données avec accent sous delphi 6
    Par kinda dans le forum Débuter
    Réponses: 3
    Dernier message: 03/07/2003, 13h19

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