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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 é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!

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

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