Utilisation de plusieurs requetes SQL dans un Tableau

BobFire
Invité n'ayant pas de compte PHPfrance

05 nov. 2014, 15:03

Bonjour à tous,

Je souhaite afficher un planning de travaille dans un tableau avec 3 colonnes (Matin, Après-Midi, Nuit). Pour cela, je requête une table déjà remplie et execute un msqli_fecth_array pour envoyer mes resultats dans un tableau.
Malheureusement, le tableau ne me renvoie pas l'ensemble des resultats, voici mon code :
 <table width="980" style="border-collapse:collapse;">
   <tr height="15"><td width="980" colspan=3></td></tr>
   <tr>
    <td width="980" align=center class="titrepage" colspan=3>Visualisation de la liste de Garde</td>
   </tr>
   <tr>
    <td width="980" colspan=3><hr style="height:0; border:solid 2px black"></hr></td>
   </tr>
<?php

$connexion = mysqli_connect($hote,$utilisateur,$motdepasse,$bdd)
		or die ("Connexion au serveur impossible.");

$requetematin = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a 
			 WHERE l.agent = a.IDAgent AND typegarde = 'Garde' 
			 OR l.agent = a.IDAgent AND typegarde = '08h00 - 20h00' 
			 OR l.agent = a.IDAgent AND typegarde = 'Matin'";
				 
$resultatmatin = mysqli_query($connexion,$requetematin);

$requeteapresmidi = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a 
			 WHERE l.agent = a.IDAgent AND typegarde = 'Garde' 
			 OR l.agent = a.IDAgent AND typegarde = '08h00 - 20h00' 
			 OR l.agent = a.IDAgent AND typegarde = 'Après-Midi'";
				 
$resultatapresmidi = mysqli_query($connexion,$requeteapresmidi);

$requetenuit = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a 
			 WHERE l.agent = a.IDAgent AND typegarde = 'Garde' 
			 OR l.agent = a.IDAgent AND typegarde = '20h00 - 08h00'";
				 
$resultatnuit = mysqli_query($connexion,$requetenuit);
?>
    <tr>
	 <td class="Titre" width="325" align=center style="border-right:1px solid; border-bottom:1px solid">Matin</td>
	 <td class="Titre" width="300" align=center style="border-left:1px solid; border-right:1px solid; border-bottom:1px solid">Après-Midi</td>
	 <td class="Titre" width="325" align=center style="border-left:1px solid; border-bottom:1px solid">Nuit</td>
	</tr>
<?php 
while ($lignematin = mysqli_fetch_array($resultatmatin) AND $ligneapresmidi = mysqli_fetch_array($resultatapresmidi) AND $lignenuit = mysqli_fetch_array($resultatnuit))
  {
  list($idmatin,$datematin,$agentmatin,$typegardematin,$observationmatin,$nommatin,$prenommatin)=$lignematin; 
  list($idapresmidi,$dateapresmidi,$agentapresmidi,$typegardeapresmidi,$observationapresmidi,$nomapresmidi,$prenomapresmidi)=$ligneapresmidi; 
  list($idnuit,$datenuit,$agentnuit,$typegardenuit,$observationnuit,$nomnuit,$prenomnuit)=$lignematin; 

  $i2=0;
  
   if ($i2=0)
   { 

   }
   else 
   {	
	$datemodifie = TUSF ($date);
	echo "<tr>"; 
	echo "<td class=\"Titre\" width=\"300\" align=center style=\"border-right:1px solid; border-bottom:1px solid\">$nommatin $prenommatin $idmatin</td>";
	echo "<td class=\"Titre\" width=\"300\" align=center style=\"border-left:1px solid; border-right:1px solid; border-bottom:1px solid\">$nomapresmidi $prenomapresmidi $idapresmidi</td>";
	echo "<td class=\"Titre\" width=\"325\" align=center style=\"border-left:1px solid; border-bottom:1px solid\">$nomnuit $prenomnuit $idnuit</td>";
	echo "</tr>";
   }
    $i2++ ;
   }		

?>   
  </table>
Merci d'avance pour votre aide.

ynx
Mammouth du PHP | 586 Messages

05 nov. 2014, 16:00

Salut,

Tes requêtes ne semblent pas correctes. On peut les corriger simplement comme ceci :
$requetematin = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a
                         WHERE l.agent = a.IDAgent AND typegarde IN ('Garde', '08h00 - 20h00', 'Matin')";

$requeteapresmidi = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a
                         WHERE l.agent = a.IDAgent AND typegarde IN ('Garde', '08h00 - 20h00', 'Après-Midi')";

$requetenuit = "SELECT l.*,a.Nom, a.Prenom FROM listedegarde l, agent a
                         WHERE l.agent = a.IDAgent AND typegarde IN ('Garde', '20h00 - 08h00')";
Cela dit je trouve étrange que la valeur du champ typegarde puisse être égale à 'Garde' : celle-ci ne nous donne aucune information sur la période et donc cette garde se retrouvera dans les résultats des 3 requêtes. Un problème de conception bdd ?
Dans l'idéal tu devrais pouvoir récupérer l'ensemble des gardes avec chacune leur période (marin, aprèm, nuit) en une seule et unique requête.

Bonne journée

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2014, 16:18

Merci pour les requêtes elles sont plus fluides comme cela.

Pour la valeur garde, elle représente une durée de 24h de travaille et c'est pour cela qu'elle se retrouve dans les 3 requêtes.
Le réel problème se retrouve dans l'affichage du tableau, tous les enregistrements ne s'affiche pas correctement dans le tableau comme décrit dans le code