Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/07/2007, 09h58   #1
Membre à l'essai
 
Inscription : mai 2007
Messages : 137
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 137
Points : 22
Points : 22
Par défaut [SQL] Mise en page d'un tableau oui/non

Bonjour à tous,

Je dois créer un tableau oui/non à partir d'une base de données qui aurait la forme suivante :

outil 1 | outil 2 |outil 3 | outil 4 ... outil 100
garage1 X X X
garage2 X X X
garage3 X X X
garage4 X X X
garage100 X X X

Avant de faire ce tableau, je fais une recherche pour savoir suivant des critéres la liste des garages qui conviendraient.

J'ai donc au final :
-une premiére requête avec la liste des garages.
-une seconde requête avec la liste des outils pour les afficher dans mon tableau.

Il me reste plus qu'à afficher pour chaque garage si ils ont les outils.(c'est à dire les coix)

Et là j'ai un probléme.

Avec ma premiére requête je récupére les numéros de garage dans un tableau.
Puis pour chaque garage je fais :
-une requête pour prendre les liaisons garage_outil
-une requête pour reprendre ma liste d'outil

et après je regarde suivant ma liste d'outil si la liaison existe :

-si elle existe -> cela m'affiche une croix
-si elle n'existe pas -> cela m'affiche une case vide

voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
	$j=0;
	$nbGarage=count($garage);
	for ($i=0;$i<1;$i++){
		$sql3="SELECT NUMOUTIL, DESCRIPTIONOUTIL FROM OUTIL, GARAGE_OUTIL WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL AND NUMGARAGE=".$garage[$i]." ORDER BY NOMOUTIL";
		$resultat3  = mysql_query($sql3)  or die(mysql_error());
		$sql4 = "SELECT NUMOUTIL FROM OUTIL ORDER BY NOMOUTIL";
		$resultat4  = mysql_query($sql4)  or die(mysql_error());
		while ($row = mysql_fetch_row($resultat3) && $row2 = mysql_fetch_row($resultat4)){
		   $l1 = count ($row2);
		   for($i=0;$i<$l1;$i++){
			    $l2 = count ($row2 [$i]);
		        if ($row2[$i]==$row[$j]){
		   			echo("<td class='hauteur3_jc'>$row2[$i] et $row[$j]</td>");
		   			$j=$j+1;
				}
				else{
		   			echo("<td class='hauteur3_jc'>$row2[$i] et $row[$j]</td>");
				}
			}
		}	
	}
	?>
Je pense qu'il y a un probléme car il ne me veut pas de :
Code :
while ($row = mysql_fetch_row($resultat3) && $row2 = mysql_fetch_row($resultat4)){
J'espere que vous pourrez m'aider. Si mon message n'est pas compréhensible n'hesiter pas à me poser des questions.

@+ Seb
Seb981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h02   #2
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
bonjour,

je comprends pas trop l'interet de
Code :
1
2
3
4
5
6
7
$sql3="SELECT NUMOUTIL, DESCRIPTIONOUTIL 
	FROM OUTIL, GARAGE_OUTIL 
	WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL 
	AND NUMGARAGE=".$garage[$i]." 
	ORDER BY NOMOUTIL";
 
$sql4 = "SELECT NUMOUTIL FROM OUTIL ORDER BY NOMOUTIL";
A premiere vu $sql4 est inutil
__________________
Tuc l'Original, On ne peut que l'aimer
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h07   #3
Membre à l'essai
 
Inscription : mai 2007
Messages : 137
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 137
Points : 22
Points : 22
Merci pour ton message.

Ben c'est à dire que sql4 me permet de reprendre ma liste d'outil et après je regarde en fonction de cette liste compléte si mon garage posséde un outil de cette liste.

(au tout début, je fais une premiére requête pour afficher ma liste d'outil car mon tableau étant très très grand, je les affiche avec une image à la verticale).
Seb981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h09   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Je rejoins TucSale sur ton histoire de requete SQL. Je pense que tu peux trouver un moyen de faire une seule requete pour avoir TOUS les résultats. Ca sera bien plus rapide que deux requetes dans une boucle et tu n'auras pas le problème de fetcher deux résultats à la fois dans ta boucle (et je ne suis pas sur que ca marchera d'ailleurs là).
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h16   #5
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
Fais attention a ta variable $i que tu utilise 2 fois dans 2 boucles differents
ensuit tu fais une mauvaise utilisation de mysql_fetch_row
__________________
Tuc l'Original, On ne peut que l'aimer
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h18   #6
Membre à l'essai
 
Inscription : mai 2007
Messages : 137
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 137
Points : 22
Points : 22
Mais je ne vois pas comment faire autrement pour :

mon affichage horizontal : 1 requete pour la liste des garages
mon affichage vertical : 1 requete pour la liste des outils

mes croix : 1 requete pour connaitre les liaisons : garage-outil. ( elle ce fait autant de fois qu'il y a de garage )

Si pendant mon affichage horizontal, je reprend ma liste d'outil dans un tableau j'aurais déjà une requête en moins.
Seb981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h39   #7
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
tiens voici un bout de code fais en speed
Code :
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
?php  	
	/* initialisation du tableau d'outil et création de la ligne d'entete  */
	$sql4 = "SELECT NUMOUTIL, DESCRIPTIONOUTIL FROM OUTIL ORDER BY NOMOUTIL;";
	$resultat4  = mysql_query($sql4)  or die(mysql_error());
	$NbMaxOutil = mysql_num_rows($resultat4 ); //Nombre d'outil dans ta base
	echo "<tr>";
	echo("<td class='hauteur3_jc'>Garage</td>");
	while ($row2 = mysql_fetch_row($resultat4)){
		echo("<td class='hauteur3_jc'>".$row2[1]."</td>");
		$tabOutil[] = $row2[0];
	}
	echo "<tr />";
 
 
	$nbGarage = 1;//$nbGarage=count($garage);
	for ($i=0;$i<$nbGarage;$i++){	
		/* initialisation du tableau d'outil pour un garage donné */
		$sql4 = "SELECT NUMOUTIL
			FROM OUTIL, GARAGE_OUTIL 
			WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL 
			AND NUMGARAGE=".$garage[$i]." 
			ORDER BY NOMOUTIL";
		$resultat4  = mysql_query($sql4)  or die(mysql_error());
		while ($row2 = mysql_fetch_row($resultat4)) $tabOutilGarage[] = $row2[0];
 
		echo "<tr>";
		echo("<td class='hauteur3_jc'>".$garage[$i]."</td>");
		for ($Compt=0;$Compt<$NbMaxOutil;$Compt++){	
			/* Test de la présence de l'outil dans le garage */
			if (in_array ($tabOutil[$Compt], $tabOutilGarage)) echo("<td class='hauteur3_jc'>oui</td>");
				else echo("<td class='hauteur3_jc'>non</td>");
		}
		echo "<tr/>";
	}
?>

C'est fais vite fais, en esperant que ca puisse t'aider.
Pour eviter d'appeler ta requete de selection d'outil, je l'ai sortie de la boucle et mise le résultat dans un tableau (j'aime bien les tableau )
Je suis sur que c'est a ameliorer.

petit exemple de ysql_fetch_row
Code :
1
2
3
4
5
6
7
8
9
10
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
   echo 'Impossible d\'exécuter la requête : ' . mysql_error();
   exit;
}
$row = mysql_fetch_row($result);
 
echo $row[0]; // 42
echo $row[1]; // la valeur du champ email
__________________
Tuc l'Original, On ne peut que l'aimer
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 10h46   #8
Membre à l'essai
 
Inscription : mai 2007
Messages : 137
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 137
Points : 22
Points : 22
Merci pour ton message et pour ton aide. Je vais esssayer de suite ton code.
Seb981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 08h29   #9
Membre à l'essai
 
Inscription : mai 2007
Messages : 137
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 137
Points : 22
Points : 22
Je suis enfin arrivé à un résultat hier soir. Je me suis aidé de ton code mais il y a des choses que j'ai mis de coté car j'ai pas trop compris ta façon de faire des tableaux.

Voici mon résultat :

Code :
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php 	
 
$nbGarage = count($garage);
$nbOutil = count($outil);
$nbControle = count($controle);
/*
/* POUR CHAQUE GARAGE */
$k=0;$g=0;
$f = 0;
$jj="jc";
for ($i=0;$i<$nbGarage;$i++){
	$sql3 /* REQUETE POUR TROUVER LES CARACTERISTIQUES DU GARAGE */
	$resultat3 = mysql_query($sql3)  or die(mysql_error());
	/* DEBUT */
	echo("<tr>");
	/* OUTIL */
	while($row = mysql_fetch_row($resultat3)){
		$l1=count($row);
		for($j=0;$j<$l1;$j++){
			$l2=count($row[$j]);
			while($row[$j]!=$outil[$k] && $outil[$k]<$nbOutil){
				echo("<td class='hauteur3_".$jj."'></td>");
				$k++;
			}
			echo("<td class='hauteur3_".$jj."'>X</td>");
			$k++;
			$j=$j+1;
		}
	}
	while($k!=$nbOutil){
				echo("<td class='hauteur3_".$jj."'></td>");
				$k++;
			}
	/* CONTROLE*/
	$sql4 /* REQUETE POUR TROUVER LES CONTROLES DU GARAGE */
	$resultat4  = mysql_query($sql4)  or die(mysql_error());
 
	while($row2 = mysql_fetch_row($resultat4)){
		$l3=count($row2);
		for($j=0;$j<$l3;$j++){
			$l4=count($row2[$j]);
 
			while($row2[$j]!=$controle[$g] && $controle[$g]<$nbControle){
				echo("<td class='hauteur3_".$jj."'></td>");
				$g++;
			}
			echo("<td class='hauteur3_".$jj."'>X</td>");
			$g++;
		}
	}
	while($g!=$nbControle){
				echo("<td class='hauteur3_".$jj."'></td>");
				$g++;
			}
	/* FIN */
	echo("</tr>");
	$k=0;$g=0;
	$f++;
	$jj="jf";
	if($f==2){
	   $f=0;
	   $jj="jc";
	}
}
?>
Toutes les critiques sont les bienvenues.

( j'avais oublié de préciser que mon tableau était plus complexe :
outil 1 | outil 2 |outil 3 | outil 4 ... outil 100| controle1 ... controle 50
garage1
garage2
garage3
garage4
garage100
)

@+ Seb
Seb981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h44.


 
 
 
 
Partenaires

Hébergement Web