un while dans un while

un while dans un while - PHP - Programmation

Marsh Posté le 04-11-2005 à 16:33:06    

bonjour,
voila j'ai differents spectacles dans differentes villes. je voudrais faire un tableau par ville, et dans chaque tableau on a toutes les dates de la ville

Code :
  1. <?
  2. $req_ville=mysql_query("SELECT * from ville ORDER BY classement" );
  3. $req_date=mysql_query("SELECT * from date,ville WHERE date.ville_id=ville.ID ORDER BY date" );
  4. mysql_close($connexion);
  5. while( $resultats = mysql_fetch_assoc($req_ville)){
  6. //affichage de la ville
  7. echo'<table width="600" align="center" border="1" cellpadding="0" cellspacing="0" bordercolor="#C4C3D0">';
  8. echo'<tr height="30" bgcolor="red"><td width="400" >&nbsp;&nbsp;';
  9. echo $resultats ['nom'];
  10. echo $resultats ['ID'];
  11. echo'</td></tr>';
  12. //affichage des dates
  13. while( $resultats_date = mysql_fetch_assoc($req_date)){
  14. echo '<tr><td>'.$resultats_date ['date'];
  15. echo '<br>'.$resultats_date ['ville_id'];
  16. echo'</td></tr>';
  17. }
  18. //
  19. echo'</td></tr></table><br><br>';
  20. }
  21. ?>


mais le soucis, C'est que toutes mes dates s'affiche dans la premiere ville
comment faire?(ma requete date ne doit pas etre bonne)
merci de votre aide

Reply

Marsh Posté le 04-11-2005 à 16:33:06   

Reply

Marsh Posté le 04-11-2005 à 16:35:51    

Hummm...

Code :
  1. while { //Premier while
  2.    // Second while
  3.    while {
  4.       //requête pour obtenir les données concernant la ville en cours
  5.    }
  6. }


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 16:39:29    

je dois donc mettre :

Code :
  1. $req_date=mysql_query("SELECT * from date,ville WHERE date.ville_id=ville.ID ORDER BY date" );


dans le second while?
et ou dois je fermer la connexion ?
merci de votre aide


Message édité par attentio le 04-11-2005 à 16:39:50
Reply

Marsh Posté le 04-11-2005 à 16:43:32    

J'me suis trompé.
Reprennons :
 
Tu fais ta première requête, ensuite tu enchaine sur ton premier while avec mysql_fetch_assoc().
 
Dans ce premier while tu fais une seconde requête qui est la suivante :
 

Code :
  1. $req_date=mysql_query("SELECT * from date WHERE ville_id=".$resultats["id"]."ORDER BY date" );


 
A partir de laquelle tu encahine sur ton second while avec cette nouvelle requête et dans ce second while tu fais l'affichage des dates.
 
Bon je suis pas sur de moi là, faut tester/adapter si besoin.


Message édité par dwogsi le 04-11-2005 à 16:44:32

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 16:47:26    

Cela dit ce genre de truc est faisable en une seule requête en rusant un peu.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 04-11-2005 à 16:53:50    

Slt, si je devais corriger ton code je ferais comme suit, il me semble que ca devrais mieux fonctionné.  
 
<?
$req_ville=mysql_query("SELECT * from ville ORDER BY classement" );
//$req_date=mysql_query("SELECT * from date,ville WHERE date.ville_id=ville.ID ORDER BY date" );
mysql_close($connexion);
 
while( $resultats = mysql_fetch_assoc($req_ville)){  
//affichage de la ville
echo'<table width="600" align="center" border="1" cellpadding="0" cellspacing="0" bordercolor="#C4C3D0">';
echo'<tr height="30" bgcolor="red"><td width="400" >&nbsp;&nbsp;';
echo $resultats ['nom'];
echo $resultats ['ID'];
echo'</td></tr>';
 
$req_date=mysql_query("SELECT * from date,ville WHERE date.ville_id=$resultats['ID'] ORDER BY date" );
 
//affichage des dates
while( $resultats_date = mysql_fetch_assoc($req_date)){  
    echo '<tr><td>'.$resultats_date ['date'];
    echo '<br>'.$resultats_date ['ville_id'];
    echo'</td></tr>';
}
//
echo'</td></tr></table><br><br>';
}
?>
     

Reply

Marsh Posté le 04-11-2005 à 16:55:44    

sielfried a écrit :

Cela dit ce genre de truc est faisable en une seule requête en rusant un peu.


Vas-y ruse, ca m'intéresse!
 

DEns91 a écrit :

Slt, si je devais corriger ton code je ferais comme suit, il me semble que ca devrais mieux fonctionné.


J'avais prévennu que j'étais pas sur de moi.  ;)

Message cité 1 fois
Message édité par dwogsi le 04-11-2005 à 16:56:44

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 16:55:46    

j'ai fais ceci :

Code :
  1. <?
  2. // requête ville
  3. $req_ville=mysql_query("SELECT * from ville ORDER BY classement" );
  4. while( $resultats = mysql_fetch_assoc($req_ville)){
  5. //affichage des villes
  6. echo'<table width="600" align="center" border="1" cellpadding="0" cellspacing="0" bordercolor="#C4C3D0">';
  7. echo'<tr height="30" bgcolor="red"><td width="400" >&nbsp;&nbsp;';
  8. echo $resultats ['nom'];
  9. echo $resultats ['ID'];
  10. echo'</td></tr>';
  11. //affichage des dates
  12. $req_date=mysql_query("SELECT * from date WHERE ville_id=".$resultats["ID"]."ORDER BY date" );
  13. while( $resultats_date = mysql_fetch_assoc($req_date)){
  14. echo '<tr><td>'.$resultats_date ['date'];
  15. echo '<br>'.$resultats_date ['ville_id'];
  16. echo'</td></tr>';
  17. }
  18. echo'</td></tr></table><br><br>';
  19. }
  20. mysql_close($connexion);
  21. ?>


mais j'ai une erreur :Warning: mysql_fetch_array(): supplied argument is not a valid MySQL sur le deuxieme while
d'ou cela peut venir ?
merci encore de votre aide

Reply

Marsh Posté le 04-11-2005 à 16:57:27    

Un espace avant ORDER dans la seconde requete peut etre?
Et quand tu à une erreur de ce genre, pense à faire un echo mysql_error(); juste après ta requête.


Message édité par dwogsi le 04-11-2005 à 16:58:36

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 16:58:22    

dwogsi a écrit :

Vas-y ruse, ca m'intéresse!


 
Ben tu fais une seule requete histoire d'avoir un truc comme ça :
ville1 date1
ville1 date2
ville1 date3
ville2 date4
ville3 date5
ville3 date6
 
Et tu fermes/crées un nouveau tableau dès que $row['ville'] change.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 04-11-2005 à 16:58:22   

Reply

Marsh Posté le 04-11-2005 à 16:59:12    

Euh... Oui c'est logique en fait.
Que je suis c**.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 17:02:46    

yes !  
ca semble marcher !
merci a tous

Reply

Marsh Posté le 04-11-2005 à 17:05:49    

yep, tu fais un group by

Reply

Marsh Posté le 05-11-2005 à 02:45:11    

Pourquoi un GROUP BY?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 05-11-2005 à 03:39:55    

et bien un group by ville pour regrouper par ville comme ca :  
 

sielfried a écrit :

Ben tu fais une seule requete histoire d'avoir un truc comme ça :
ville1 date1
ville1 date2
ville1 date3
ville2 date4
ville3 date5
ville3 date6
 
Et tu fermes/crées un nouveau tableau dès que $row['ville'] change.


 
non ? je me trompe peut etre ...

Reply

Marsh Posté le 05-11-2005 à 08:23:20    

Euh non, là ça va sortir que la première date de chaque ville ou un truc du genre. :/
 
Suffit de faire order by ville.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 05-11-2005 à 14:58:10    

Ouai un ORDER BY je veut bien parce que un GROUP BY ca sortirait plutot qu'une date par ville.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 05-11-2005 à 16:00:25    

oulaaaa, je me suis trompé alors ...   :(


Message édité par weed le 05-11-2005 à 16:01:05
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed