Version complète: sur le forum Webmaster Hub : Problème de requéte croisée
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
flo001
Salut à tous!

Voici mon problème, 3 tables:

- "vidéo" avec |id_video|nom_video|
- "catégorie" |id_categorie|nom_categorie|
- "lien_categorie" |id_video|id_categorie|

un vidéo peut appartenir a plusieurs catégories, comment en une requéte pouvoir afficher une liste comme celle la:

vidéo1 : cat1, cat5, cat10
video2 : cat3, cat4
video3 : cat2, cat8
....

Je vous remercie.
Florent
sarc
Bonjour !

Je vais tenter de le faire sans échauffement, donc excuse-moi si je fais une erreur bête et méchante...
En fait, ce que je fais dans ce cas-là, c'est un truc du genre :

SQL
SELECT id_cat b, nom_cat b, id_vid a FROM categories b, videos a, liens c WHERE c.id_vid=a.id_vid AND c.id_cat=b.id_cat ORDER BY a.id_vid


Ensuite, en PHP, tu peux traiter les données :

CODE
while($donnees=mysql_fetch_array(mysql_query($rq)))
{
  extract($donnees);
  $tableau_traites[$id_vid][] = $nom_cat;
}


Puis enfin, pour afficher les données
CODE
foreach($tableau_traites AS $clef=>$tableau_cat)
{
  echo "vidéo $clef : ".explode(', ', $tableau_cat);

}


Voilà, ça devrait pouvoir ressembler à ça. smile.gif
flo001
Wahouu pinaise, j'ai pas tout compris, bon je vais essayer de démêler ca, je te remercie! Si vous connaissez d'autres techniques je suis prenneur.
sarc
J'ai oublié les sous-titres en Français...

J'espère que tu lis à peu près le SQL, déjà. La requête va juste chercher les vidéos et les catégories qui correspondent.
En gros ça va renvoyer :

vidéo1 catégorie1
vidéo1 catégorie5
vidéo1 catégorie10
vidéo2 catégorie3

etc...

Le premier code PHP va juste ranger dans un tableau les catégories associées au vidéo.
A la fin, tu auras un tableau qui a cette gueule :

tableau[vidéo1][0] = nom_categorie1
tableau[vidéo1][1] = nom_categorie5
tableau[vidéo1][2] = nom_categorie10
tableau[vidéo2][0] = nom_categorie3
etc...

Le deuxième code PHP va parcourir le tableau par rapport à la première dimension.
Donc en rentrant dans le foreach, il va avoir $clef qui sera vidéo1, et $tableau_cat qui sera le tableau :
$tableau_cat[0] = nom_categorie1
$tableau_cat[1] = nom_categorie5
$tableau_cat[2] = nom_categorie10

Faire un écho de la clef te permet d'afficher le numéro de la vidéo. Et l'implode sur le tableau permet de t'afficher tous les éléments du tableau, à la suite, séparés par une virgule... smile.gif

Voili voilou !

flo001
Ok c'est plus clair, merci pour la traduction smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.