cdie
Messages postés31Date d'inscriptionjeudi 3 décembre 2009StatutMembreDernière intervention12 février 2012
-
12 févr. 2012 à 23:23
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 2013
-
13 févr. 2012 à 14:50
Bonjour à tous,
Je me casse actuellement la tête sur une requête et je n'arrive pas à comprendre les résultats. J'ai deux tables : une table location et une table emplacement. LA table location contient une date_debut et une date_fin.
J'aimerais retourner les emplacements qui ne sont pas loués pour une période donnée. je passe par PHP pour passer les paramètres.
DAns ma table, j'ai les emplacement 1, 2 et 3 qui sont loués du 18/01/2012 au 29/01/2012, et le 4, 5 qui ne sont pas loué et n'ont aucune occurence dans la table location.
Voici ma requête test
SELECT e.em_id, e.em_libelle FROM emplacement e
left join location l on e.em_id = l.em_id WHERE
to_date('19/01/2012','dd/mm/yyyy') NOT BETWEEN to_date(l.lo_date_arrivee,'dd/mm/yyyy') AND to_date(l.lo_date_depart,'dd/mm/yyyy')
AND
to_date('21/01/2012','dd/mm/yyyy') NOT BETWEEN to_date(l.lo_date_arrivee,'dd/mm/yyyy') AND to_date(l.lo_date_depart,'dd/mm/yyyy')
AND em_fonctionnel='y'
Le problème, c'est que cette requête me renvoie les 3 premiers emplacements qui sont loués ... ?
De plus, j'ignore comment faire au cas où les deux dates sont en dehors des bornes, donc par exemple, 17/01/2012 au 30/01/2012...
J'ai pensé au PL/SQL mais je ne vois pas comment faire pour retourner ces emplacements...
Si quelqu'un a déjà été confronté à cela ou a une idée, j'en serai reconnaissant !
Merci d'avance
A voir également:
The projects in the reactor contain a cyclic reference
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 13 févr. 2012 à 14:50
Oyoy,
je ne me suis pas encore penché sur ton besoin. Juste une petite remarque dans un premier temps : tes champs lo_date_arrivee et lo_date_depart ne sont-ils pas au format Date ? Si oui alors il ne faut pas utiliser la fonction de cast TO_DATE().
Si j'ai quelques minutes dans l'après-m' je regarde ton souci de plus près ;)