Bonjour,
Le titre est probablement pas adapté mais je ne sais pas vraiment sur quoi va porter la réponse.

Alors voilà mon problème : Je veux faire une requête de ma table TRAJET, en remplaçant tout les ID de clés étrangères par un libellé plus logique à afficher.
Voilà comment est composé de façon simplifiée ma base :

/* J'ai volontairement pas mis l'intégralité des champs, ils ne vous intéresse pas. */
TRAJET (id_trajet, #id_salarie, #id_villedepart, #id_villearrivee, ...); avec id_trajet en clé primaire.
SALARIE (id_salarie, nom, prenom, ...); avec id_salarie en clé primaire.
VILLE (id_ville, nom, ...); avec id_ville en clé primaire.

Voilà à quoi ressemble ma requête pour le moment :

SELECT id_trajet, nom, id_villedepart , id_villearrivee, nbpassagers, ...
FROM trajet
INNER JOIN salarie ON trajet.id_salarie = salarie.id_salarie
WHERE id_trajet in (
    select id_trajet from INSCRIT where id_salarie like ".$this->id_salarie.")

Comment je peux faire pour que ma requête me renvoie les noms respectifs des ville de départ et d'arrivée ?
On est d'accord que je ne peux remplacer id_villedepart et id_villearrivee par ville.nom, avec un INNER JOIN sinon sql ne saura pas qu'elle ville je veux ?

J'ai pensé à faire un UNION à la suite mais ça me rallonge de beaucoup la requête.
Merci d'avance de votre attention :)

Metylene.

2 réponses


Huggy
Réponse acceptée

Tu dois utiliser des alias et faire deux jointures pour tes deux villes

SELECT id_trajet, nom, id_villedepart , id_villearrivee, nbpassagers, VDepart.nom, VArrivee.nom ...
FROM trajet
INNER JOIN ville VDepart ON (trajet.id_villedepart = VDepart.id_ville)
INNER JOIN ville VArrivee ON (trajet.id_villearrivee = VArrivee.id_ville)
INNER JOIN salarie ON trajet.id_salarie = salarie.id_salarie
WHERE id_trajet in (
    select id_trajet from INSCRIT where id_salarie like ".$this->id_salarie.")
Metylene
Auteur

Merci pour ton aide :)