Requête sur 2 tables (bis)

Eléphanteau du PHP | 28 Messages

03 oct. 2008, 09:07

Bonjourà tous,
Voici ma première table :

Table 'equipes' :
id_equipe
division_equipe
groupe_equipe
nom_equipe
id_cafe (reprend id_cafe de la seconde table)

La seconde table :

Table 'coordonnees_cafes' :
id_cafe
nom_cafe
adresse
cp
ville
telephone

Cette fois-ci, à partir de ces 2 tables, j'aimerais afficher un tableau qui reprend chaque café avec toutes ses coordonnées(adresse, cp, ville, tél), et aussi (et c'est là où j'ai un peu de mal) toutes les équipes avec divisions et groupes correspondantes.

Voici l'exemple en dur pour chaque café :

Code : Tout sélectionner

<table cellspacing="1"> <tr> <th>&raquo; $nom_cafe</th> <td rowspan="2'>$toutes_les_equipes du même café avec division et groupe</td> </tr> <tr> <td>$adresse<br> $cp $ville<br> $telephone</td> </tr> </table>
Une fois de plus, la formulation de la requête me pose problème...

----------------
Merci d'avance pour votre aide.
----------------------
Domi

lux
Eléphant du PHP | 372 Messages

03 oct. 2008, 09:32

Salut. As tu déjà codé la requète ? Peux tu poster la requete que tu as déjà, qu'on puisse se faire un idée ou ça coince :wink:

Eléphanteau du PHP | 28 Messages

03 oct. 2008, 09:41

Ben en fait, j'ai juste cette requête pour sélectionner et afficher les cafés, mais c'est pour faire la jointure avec l'autre table et sélectionner les équipes par café que je pêche...
$result = mysql_query("SELECT * from coordonnees_cafes");
while($ligne = mysql_fetch_object($result))
{
$id_cafe= $ligne->id_cafe;
$nom_cafe= $ligne->nom_cafe;
$adresse= $ligne->adresse;
$cp= $ligne->cp;
$ville= $ligne->ville;
$telephone= $ligne->telephone;
...
}
----------------------
Domi

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 oct. 2008, 13:57

Tu as plusieurs solutions... soit tu fais une requête par café pour aller chercher les infos des équipes associées :
$result = mysql_query("SELECT * from coordonnees_cafes"); 
while ($ligne = mysql_fetch_object($result)) { 
  $id_cafe= $ligne->id_cafe; 
  ... 
  $rsEquipe = mysql_query("SELECT * FROM equipes WHERE id_cafe=".$id_cafe); 
  while ($ligneEquipe = mysql_fetch_object($rsEquipe)) { 
    $id_equipe= $ligneEquipe->id_equipe; 
  }
}
Le problème, c'est que tu vas faire une requête par café, et le jour où tu as 1000 cafés, tu lances 1000 requêtes... c'est donc pas la solution la plus performante.

Une autre solution consiste à faire une jointure dans ta requête pour croiser les données :
$result = mysql_query("SELECT nom_cafe, adresse, ..., id_equipe, division_equipe, ... 
  FROM  coordonnees_cafes, equipes 
  WHERE coordonnees_cafes.id_cafe = equipes.id_cafe"); 
while ($ligne = mysql_fetch_object($result)) { 
  $nom_cafe= $ligne->nom_cafe; 
  ... 
  $id_equipe= $ligne->id_equipe; 
  ...
}
Dans ce cas, les informations du café sont répétées pour chaque équipe... à toi de voir si cela te convient, où dans le cas contraire, n'afficher les informations sur le café que lorsqu'elles sont différentes de celles de l'enregistrement précédent (utiliser une variable temporaire pour les stocker)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

06 oct. 2008, 14:11

Merci pour ton aide.
En effet, la seconde solution est la plus appropriée dans mon cas, la difficulté étant de ne pas répéter les coordonnées pour chaque équipe.
Je regarde...
----------------------
Domi