LEFT JOIN QUI NE MARCHE PAS
Résolu
matmat8888
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
matmat8888 Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
matmat8888 Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
voilà j'ai un soucis avec du SQL, je dois obtenir la quantité de véhicules disponibles entre le 25 mai et le 26 mai 2017. J'ai la requête suivante :
SELECT v.id_type_vehicule, tv.nom, tv.nom_en, tv.nom_de, COUNT( v.id ) AS qte, tv.photo_url, tv.tarif_journalier
FROM vehicule v
LEFT JOIN location_vehicule lv ON v.id = lv.id_vehicule -- boucle sur les véhicules (véhicules numéro 1, 2, 3 etc.)
LEFT JOIN location loc ON lv.id_location = loc.id -- boucle sur les locations (locations numéro 1, 2, 3 etc.)
LEFT JOIN type_vehicule tv ON v.id_type_vehicule = tv.id -- boucle sur les types de véhicules (Clio, Fiat, Peugeot etc.)
WHERE
("2017/05/25" NOT BETWEEN loc.debut AND loc.fin) AND ("2017/05/26" NOT BETWEEN loc.debut and loc.fin) OR loc.debut IS NULL
GROUP BY v.id_type_vehicule
ORDER BY tv.tarif_journalier
Mon soucis est que je n'ai qu'une Clio de disponible et elle est louée du 10 au 24 mai puis du 27 mai au 5 juin. Lorsque je fait tourner ma requête elle me dit que il y a deux Clios de disponibles or j'en ai qu'une... Le soucis est que je boucle sur les commandes et que il y a bien deux commandes qui respectent mes conditions dans mon WHERE... Est ce que vous avez une solution à me proposer afin de tenir compte du fait que je n'ai qu'un seul véhicule ??
Un grand merci d'avance pour vos réponses !
Mathieu
voilà j'ai un soucis avec du SQL, je dois obtenir la quantité de véhicules disponibles entre le 25 mai et le 26 mai 2017. J'ai la requête suivante :
SELECT v.id_type_vehicule, tv.nom, tv.nom_en, tv.nom_de, COUNT( v.id ) AS qte, tv.photo_url, tv.tarif_journalier
FROM vehicule v
LEFT JOIN location_vehicule lv ON v.id = lv.id_vehicule -- boucle sur les véhicules (véhicules numéro 1, 2, 3 etc.)
LEFT JOIN location loc ON lv.id_location = loc.id -- boucle sur les locations (locations numéro 1, 2, 3 etc.)
LEFT JOIN type_vehicule tv ON v.id_type_vehicule = tv.id -- boucle sur les types de véhicules (Clio, Fiat, Peugeot etc.)
WHERE
("2017/05/25" NOT BETWEEN loc.debut AND loc.fin) AND ("2017/05/26" NOT BETWEEN loc.debut and loc.fin) OR loc.debut IS NULL
GROUP BY v.id_type_vehicule
ORDER BY tv.tarif_journalier
Mon soucis est que je n'ai qu'une Clio de disponible et elle est louée du 10 au 24 mai puis du 27 mai au 5 juin. Lorsque je fait tourner ma requête elle me dit que il y a deux Clios de disponibles or j'en ai qu'une... Le soucis est que je boucle sur les commandes et que il y a bien deux commandes qui respectent mes conditions dans mon WHERE... Est ce que vous avez une solution à me proposer afin de tenir compte du fait que je n'ai qu'un seul véhicule ??
Un grand merci d'avance pour vos réponses !
Mathieu
A voir également:
- Left join plusieurs tables
- Tables des matières word - Guide
- Tables ascii - Guide
- Join pdf - Télécharger - PDF
- Left shift clavier ✓ - Forum Jeux vidéo
- Touche left shift bloquée macbook - Forum MacOS
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
voici tous ceux qui ne sont pas disponibles:
et donc je suggère ceci:
qu'en penses-tu?
select v.id FROM vehicule v, location_vehicule lv, location loc WHERE lv.id_location = loc.id AND v.id = lv.id_vehicule AND (loc.fin>="2017/05/25" AND loc.debut<="2017/05/26")
et donc je suggère ceci:
SELECT v.id, v.id_type_vehicule, tv.nom, tv.nom_en, tv.nom_de, tv.photo_url, tv.tarif_journalier FROM vehicule v LEFT JOIN type_vehicule tv ON v.id_type_vehicule = tv.id WHERE v.id NOT IN (select v.id FROM vehicule v, location_vehicule lv, location loc WHERE lv.id_location = loc.id AND v.id = lv.id_vehicule AND (loc.fin>="2017/05/25" AND loc.debut<="2017/05/26"))
qu'en penses-tu?
matmat8888
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
merci c'est top ça marche nickel !! ;)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir mathieu,
je vois que tu as quatre tables: vehicule, location_vehicule, location et type_vehicule.
est-ce exact?
tu écris " elle me dit que il y a deux Clios de disponibles". peux-tu être plus précis? as-tu deux lignes avec le même Clio, ou bien une seule ligne avec qte=2?
tu écris "je boucle sur les commandes", qu'entends-tu précisément par cela?
as-tu des index uniques dans tes tables? lesquels?
je vois que tu as quatre tables: vehicule, location_vehicule, location et type_vehicule.
est-ce exact?
tu écris " elle me dit que il y a deux Clios de disponibles". peux-tu être plus précis? as-tu deux lignes avec le même Clio, ou bien une seule ligne avec qte=2?
tu écris "je boucle sur les commandes", qu'entends-tu précisément par cela?
as-tu des index uniques dans tes tables? lesquels?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
au lieu de:
je suggère:
("2017/05/25" NOT BETWEEN loc.debut AND loc.fin) AND ("2017/05/26" NOT BETWEEN loc.debut and loc.fin)
je suggère:
(loc.fin<"2017/05/25" OR loc.debut>"2017/05/26")
Bonjour yg_be,
merci pour ta réponse ! J'ai bien quatre tables avec dans chacune des id uniques. Ci-joint des screenshots.
Les véhicules sont numérotés de 1 à 13 et la Clio correspond au véhicule numéro 7 (véhicule de type 3).
Mon soucis est que je n'ai qu'une Clio et que ma requête me dit que j'en ai 2 car elle boucle sur les commandes et j'en ai que deux pour le moment mais si j'en avais 10 alors ma requête dirait que j'en ai 10 :(
Merci d'avance pour ton aide !
Mathieu

merci pour ta réponse ! J'ai bien quatre tables avec dans chacune des id uniques. Ci-joint des screenshots.
Les véhicules sont numérotés de 1 à 13 et la Clio correspond au véhicule numéro 7 (véhicule de type 3).
Mon soucis est que je n'ai qu'une Clio et que ma requête me dit que j'en ai 2 car elle boucle sur les commandes et j'en ai que deux pour le moment mais si j'en avais 10 alors ma requête dirait que j'en ai 10 :(
Merci d'avance pour ton aide !
Mathieu
