Problème SQL/PHP

Ce topic a été résolu
Green7497

Green7497 Le 8 septembre 2016 à 16:36 (Édité le 25 janvier 2019 à 17:52)

Bonjour ! 

Voilà je vous explique mon problème : je créer un site internet pour une petite entreprise. Et tous les jours les salariés de l'entreprise devront marquer ce qu'ils ont fait aujourd'hui ... Il renseigne donc leur nom, le chantier sur lequel il étaient et si ils avaient des coéquipier ou non. Si oui, il doivent selectionner le coéquipier en question.

Jusqu'ici rien de bien compliqué mais c'est là que ça se gatte. Il faut que j'affiche comme un chat par exemple : la date, le chantier, et la ou les personnes concernés. 
Concernant la date et le chantier pas de problème... Mais c'est au niveau des personnes concernés que je bloque, j'ai simplement réussi à faire une requête SQL qui me renvoie seulement les chantier où il y a eu 3 salariés dessus (donc 1 salarié + 2 coéquipiers) ...

J'ai cherché tout l'après midi sans trouver de réponse, je me tourne donc à vous pour que vous m'aidiez 

Voici le MLD de ma base de données :

personne(id_personne, nom, prenom)
chantier(id_chantier, lib_chantier, date_chantier, #id_personne, #id_coequipier1, #id_coequipier2)

Et voici mon code :

$RequeteSelect = $BDD -> query("select P1.nom as 'nom1', P2.nom as 'nom2', P3.nom as 'nom3', lib_chantier, DATE_FORMAT(date_chantier, '%d/%m/%y') AS 'date' from chantier C
                                 inner join personne P1 on C.id_personne = P1.id_personne 
                                 inner join personne P2 on C.id_coequipier1 = P2.id_personne 
                                 inner join personne P3 on C.id_coequipier2 = P3.id_personne 
                                 order by id_chantier desc limit 0,5");         
         
         while($affichage = $RequeteSelect -> fetch())
         {
            if (empty($affichage['nom2'])) 
            {
               $coequipier='seul';
            }
            else
            {
               if (empty($affichage['nom3'])) 
               {
                  $coequipier=$affichage['nom2'];
               }
               else
               {
                  $coequipier=$affichage['nom2'] . ' et ' . $affichage['nom3'];
               }
            }
            echo '<font size=2>[' . $affichage['date'] . ']</font><b> ' . $affichage['nom1'] . ', ' . $coequipier . ' : ' . '</b>' . $affichage['lib_chantier'] . '<br />';
         }
et voici ce qu'il m'affiche : 

[08/09/16] Dupont, Durand et Ducreux : chantier CHU

Merci d'avance pour vos réponse ^^
TheOldNoob

TheOldNoob Le 8 septembre 2016 à 18:43

Salut Green,

J'ai pas bien compris ton problème :(
ça ne t'affiche que les chantiers avec 3 personnes et pas celles avec 2 ou 1 seule?
Green7497

Green7497 Le 8 septembre 2016 à 19:17

Voilà, c'est ça, t'as compris 
Ça ne m'affiche que les chantiers avec 3 personnes et pas ceux avec 2 ou 1 personne, saurais-tu résoudre mon problème ? ^^
TheOldNoob

TheOldNoob Le 8 septembre 2016 à 20:18 (Édité le 8 septembre 2016 à 20:51)

Bah en gros, tu a 3 possibilité :

Seul, a 2 ou a 3.
Donc tu peu faire une condition SI, une deuxieme ELSE et une 3eme ELSE IF.

if (empty($affichage['nom2'] AND (empty($affichage['nom3'])){
   echo $affichage['nom1'].' seul.';
} 
else (empty$affichage['nom3'])) {
   echo $affichage['nom1'].' en équipe avec '.$affichage['nom2'].'.'; 
} 
else if (!empty($affichage['nom2']) AND (!empty($affichage['nom3'])){
   echo $affichage['nom1']. ' en équipe avec '.$affichage['nom2'].' et '.$affichage['nom3'];
}     
   
Voilà, un truc du genre, je t'invite a vérifié la concaténation, les parenthèses, les acolades et tout et tout 😀

Et j'ai pas testé, car j'ai pas envie de créer une bdd pour ça 😋
Green7497

Green7497 Le 8 septembre 2016 à 20:29

Oui, je viens de tester ton code mais ça me retourne la même chose que ce que j'avais fait, à savoir seulement les chantiers où il y a 3 personnes dessus. Les chantiers où il n'y a qu'une seule personne ou 2 dessus ne sont toujours pas affichés ><

Une autre idée svp ? 
TheOldNoob

TheOldNoob Le 8 septembre 2016 à 20:59

Alors, completement différents :

$RequeteSelect = $BDD -> query("select P1.nom as 'nom1', P2.nom as 'nom2', P3.nom as 'nom3', lib_chantier, DATE_FORMAT(date_chantier, '%d/%m/%y') AS 'date' from chantier C                                 inner join personne P1 on C.id_personne = P1.id_personne 
                                 inner join personne P2 on C.id_coequipier1 = P2.id_personne 
                                 inner join personne P3 on C.id_coequipier2 = P3.id_personne 
                                 order by id_chantier desc limit 0,5");         
$RequeteSelect->execute();
$team = $RequesteSelect->fetchAll(PDO::FETCH_ASSOC);
foreach($team as $showTeam) {
   if (isset($showTeam['nom1'])) {
      echo $showTeam['nom1'];
   }
   if (isset($showTeam['nom2'])) {
      echo ' avec '. $showTeam['nom2'];
   }
   if (isset($showTeam['nom3'])) {
      echo ' et '. $showTeam['nom3'];
   }
}

Green7497

Green7497 Le 8 septembre 2016 à 23:29

Désolé de ma réponse un peu tardive, j'ai été pris ><

Donc je viens de tester ça et malheureusement, le même problème persiste encore :/ 
Le code ne me renvoie que les chantier où il y a 3 personnes dessus ... 

Je commence à désespérer, pourtant ce que je voulais faire ne me semblait pas si compliquer que ça :o

D'autres idées svp ? 
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte