Partage
  • Partager sur Facebook
  • Partager sur Twitter

recuperer les donnees

    24 avril 2022 à 9:29:20

    Bonjour à tous,

    J'a un petit souci, pour créer un tableau en php suivant 2 tables SQL. 

    J'ai une table "Personnes" avec id,nom,prenom et une table "journée" avec id, J1,J2 jusqu'a J7. l'id des "personnes" se retrouve dans la table "journéeé dans les colonnes de J1àJ7, et je voudrais créer un tableau php qui liste la présence des personnes selon ces journées.

    je n'arrive pas à faire un lien entre les deux.

    Merci d'avance ;)

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2022 à 10:39:08

      Bonjour,

      Lorsque l'on numérote les colonnes comme tu l'as fait ici (j1, j2, etc.) il y a un problème de conception.

      Tu as des personnes et des jours.2 entités = 2 tables.

      Une personne participe à plusieurs jours, et un jour peut voir participer plusieurs personnes. C'est une relation n,n donc une table de relation.

      Le modèle normalisé serait donc en trois table :

      • personne ( id_personne [pk], nom, prenom, etc. )
      • jour ( id_jour [pk], libelle )
      • personne_jour ( id_personne [pk][fk], id_jour [pk][fk] )

      Lorsqu'une personne est présente sur un jour, il "suffit" d'ajouter le couple id_personne/id_jour dans la table de relation.

      La requête de base est :

      SELECT
      	PJ.id_personne,
      	P.nom,
      	P.prenom,
      	PJ.id_jour,
      	J.libelle
      FROM
      	personne_jour PJ
      		INNER JOIN personne P
      			ON PJ.id_personne = P.id_personne
      		INNER JOIN jour J
      			ON PJ.id_jour = J.id_jour
      WHERE
      	...
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        24 avril 2022 à 13:27:45

        merci, je comprends ta logique mais j'avoue que je suis perdu sur la construction de la table jour :(
        • Partager sur Facebook
        • Partager sur Twitter
          24 avril 2022 à 19:27:00

          Chaque colonne Jx de ta table actuelle est un enregistrement de la table jour.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            25 avril 2022 à 13:08:40

            ok merci

            comment reprend tu les données pour les placées dans une table html via php? avec un while je suppose mais je trouve pas le procéder sachant que je veux le mettre dans un tableau du style de l'image. 

            Merci

            -
            Edité par Laguich 25 avril 2022 à 13:40:35

            • Partager sur Facebook
            • Partager sur Twitter
              25 avril 2022 à 13:39:21

              Une façon laborieuse de faire serait de faire 7 requêtes identiques.

              -- La table personne
              -- Celle qui existe déjà
              -- Ne pas recréer du coup
              -- Juste pour exemple
              CREATE TABLE personne (
              	id_personne ...
              	...
              ) Engine=InnoDB;
              
              -- La table journée
              -- Celle qui existe déjà
              -- Ne pas recréer du coup
              -- Juste pour exemple
              CREATE TABLE journee (
              	id_journee ...
              	J1 ...
              	J2 ...
              	...
              ) Engine=InnoDB;
              
              -- La table listant les jours possibles
              CREATE TABLE jour (
              	id_jour TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
              	libelle VARCHAR(60) NOT NULL
              ) Engine=InnoDB;
              -- Les valeurs possibles (7 selon ton exemple)
              INSERT INTO jour ( id_jour, libelle )
              VALUES
              ( 1, 'Jour 1' ),
              ( 2, 'Jour 2' ),
              ( 3, 'Jour 3' ),
              ( 4, 'Jour 4' ),
              ( 5, 'Jour 5' ),
              ( 6, 'Jour 6' ),
              ( 7, 'Jour 7' );
              
              -- La table pour lier les personnes au jour
              CREATE TABLE personne_jour (
              	id_personne INT UNSIGNED NOT NULL,
              	id_jour TINYINT UNSIGNED NOT NULL,
              	PRIMARY KEY ( id_personne, id_jour ),
              	KEY ( id_personne ),
              	KEY ( id_jour ),
              	FOREIGN KEY ( id_personne ) REFERENCES personne ( id_personne ),
              	FOREIGN KEY ( id_jour ) REFERENCES jour ( id_jour )
              ) Engine=InnoDB;
              
              -- Récupération des données existantes
              INSERT INTO personne_jour ( id_personne, id_jour )
              	SELECT J1, 1
              	FROM journee
              	WHERE J1 > 0
              UNION
              	SELECT J2, 2
              	FROM journee
              	WHERE J2 > 0
              UNION
              	SELECT J3, 3
              	FROM journee
              	WHERE J3 > 0
              UNION
              	SELECT J4, 4
              	FROM journee
              	WHERE J4 > 0
              UNION
              	SELECT J5, 5
              	FROM journee
              	WHERE J5 > 0
              UNION
              	SELECT J6, 6
              	FROM journee
              	WHERE J6 > 0
              UNION
              	SELECT J7, 7
              	FROM journee
              	WHERE J7 > 0;

              Et après,

              Laguich a écrit:

              je voudrais créer un tableau php qui liste la présence des personnes selon ces journées

              La requête devient très simple avec ce modèle :

              SELECT
              	PJ.id_jour,
              	J.libelle,
              	PJ.id_personne,
              	P.nom,
              	P.prenom
              FROM
              	personne_jour PJ
              		INNER JOIN personne P
              			ON PJ.id_personne = P.id_personne
              		INNER JOIN jour J
              			ON PJ.id_jour = J.id_jour
              WHERE
              	J.id_jour = ...

              -
              Edité par Benzouye 25 avril 2022 à 13:41:36

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                27 avril 2022 à 13:32:54

                Merci cela marche, j'arrive bien a avoir le nom des joueurs pour chaque journée, mais vu qu'il me faut 7 requetes pour cela, comment je peut faire pour "intégrer" cela dans une table la colonne de gauche les noms, et la colonne du haut les 7 journées et si personne présente J1 cela coche la case. j'ai surtout besoin pour la mise en place du résultat des requêtes. 

                Merci encore

                • Partager sur Facebook
                • Partager sur Twitter
                  27 avril 2022 à 13:58:34

                  Ce que tu cherches à faire est un tableau croisé (ou PIVOT en anglais).

                  Depuis sa version 8 MySQL propose une fonction PIVOT, mais tu peux tout à fait gérer le tableau croisé côté application.

                  Tu vas coder en PHP ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    27 avril 2022 à 23:00:11

                    OUI JE VAIS  LE FAIRE EN PHP

                    Merci pour tout, ci après la requete qui fonctionne pour faire cela , cela peut aider certain comme moi ;)

                    $insertgenre = $bdd->prepare('SELECT PJ.id_jour , J.libelle, PJ.id_licencie, CONCAT_WS(" ",P.nom, P.prenom) AS nom, (CASE PJ.id_jour WHEN 1 then "X" else "-" END)as J1,(CASE PJ.id_jour WHEN 2 then "X" else "-" END)as J2,(CASE PJ.id_jour WHEN 3 then "X" else "-" END)as J3,(CASE PJ.id_jour WHEN 4 then "X" else "-" END)as J4,(CASE PJ.id_jour WHEN 5 then "X" else "-" END)as J5,(CASE PJ.id_jour WHEN 6 then "X" else "-" END)as J6,(CASE PJ.id_jour WHEN 7 then "X" else "-" END)as J7 FROM personne_jour PJ INNER JOIN licencies P ON PJ.id_licencie = P.id INNER JOIN jour J ON PJ.id_jour = J.id_jour GROUP BY nom');


                    En fait j'ai encore un souci, j'ai une seul date qui s'affcihe par peronne et non pas toutes les dates de la personne :( :( :(

                     while($ligne=$insertgenre->fetch())
                    										   
                    							  echo '<tr><td>'.$i++.'</td><td>'. $ligne['nom'].'</td><td> ' . $ligne['J1'].'</td><td> ' . $ligne['J2'].'</td>
                    <td> ' . $ligne['J3'].'</td><td> ' . $ligne['J4'].'</td><td> ' . $ligne['J5'].'</td><td> ' . $ligne['J6'].'</td><td> ' . $ligne['J7'].'</td></tr>';
                    ?>



                    -
                    Edité par Laguich 28 avril 2022 à 20:15:25

                    • Partager sur Facebook
                    • Partager sur Twitter

                    recuperer les donnees

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown