MySQL: problème avec une requête multitable

MySQL: problème avec une requête multitable - PHP - Programmation

Marsh Posté le 01-05-2004 à 22:04:18    

Hello tout le monde!
Je suis confronté à un problème qui dépasse (de peu) mes capacités. Je vous explique en deux mots:
 
Mon but est de faire un moteur de recherche de trajets.
Dans mon problème, 3 tables sont concernées:
 
trajets_longs
villes
users
 
La table trajet contient 3 champs à problème: id_user ; id_ville_dep ; id_ville_arr qui sont respectivement l'ID de l'utilisateur, l'ID de la ville de départ, l'ID de la ville d'arrivée. Les correspondance ID <-> noms sont stockés dans les autres tables.
J'aimerai, en une requete, pouvoir retourner le trajet en remplaçant l'ID de l'user et des villes par leur nom.
 
Pour l'instant, tout marche presque, avec ça:
 
SELECT trajets_longs_id, trajets_longs_id_usr, trajets_longs_vil_dep, trajets_longs_vil_arr, users_nom, villes_nom
FROM trajets_longs, users, villes
WHERE (users_id = trajets_longs_id_usr) AND (villes_id = trajets_longs_vil_dep)
 
 
Là, tout marche (sauf pour ville_arrivée qui n'est pas traité)
Si j'ajoute:
 
AND (villes_id = trajets_longs_vil_arr)
 
ça marche pas. Simplement parce que l'enregistrement concerné par trajets_longs_vil_arr n'est pas le même que celui concerné par trajets_longs_vil_dep. Il faudrait donc que je fasse comme si il s'agissait de deux tables différentes.
Vous voyez ce que je veux dire?
 
Est-ce que vous avez une idée pour contourner le problème? Ou est-ce qu'il y a moyen d'aborder le tout d'une autre manière, en optimisant un max la requete? (c'est destiné à un site avec beaucoup de traffic et des grosses BDD).
 
Merci!
 
RedLeader

Reply

Marsh Posté le 01-05-2004 à 22:04:18   

Reply

Marsh Posté le 02-05-2004 à 02:01:44    

c est possible en une seule requete.
reagrde du cote de LEFT JOIN et RIGHT JOIN...

Reply

Marsh Posté le 03-05-2004 à 08:23:26    

Code :
  1. SELECT users.nom, DEP.nom, ARR.nom
  2. FROM trajets_longs, users, villes DEP, villes ARR
  3. WHERE users.id = trajets_longs.id_usr AND DEP.id = trajets_longs.id_vil_dep AND ARR.id = trajets_longs.id_vil_arr;


 
Ou plus propre (au sens SQL du terme, mais identique en général pour le SGDB) :
 

Code :
  1. SELECT users.nom, DEP.nom, ARR.nom
  2. FROM trajets_longs JOIN users ON users.id = trajets_longs.id_usr JOIN villes DEP ON DEP.id = trajets_longs.id_vil_dep JOIN villes ARR ON ARR.id = trajets_longs.id_vil_arr


 
PS : j'ai renommé les champs dans la requete, donne moi la liste des noms exacts de tes tables si tu veux que j'adapte :)


Message édité par ratibus le 03-05-2004 à 08:24:42
Reply

Sujets relatifs:

Leave a Replay

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