Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 10h44   #1
Invité de passage
 
Inscription : avril 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 11
Points : 3
Points : 3
Par défaut Requête Sql between

Bonjour,

J'ai un petit souci avec l'écriture d'une requête.
Je dispose d'une table qui stocke des dates au format YYYY-MM-DD HH:MM:SS (Occupation : idResa, idLogement, dateDebut, dateFin) et je souhaite savoir si un intervalle de date est disponible.
Exemple :
idResa, idLogement, dateDebut, dateFin
1, 1, 2011-05-10 14:00:00, 2011-05-15 14:00:00
2, 1, 2011-05-20 14:00:00, 2011-05-25 14:00:00

Côté Php j'ai une date d'arrivé et une durée souhaitée (2011-05-15T15:00:00, 3 jours)

Je pensais utiliser between pour déterminer si la date souhaitée est disponible, mais je suis sur un base MySql (donc pas de Pl-sql).

Existe-t-il un moyen de faire cette requête ou dois-je récupérer mes dates d'occupation et faire la recherche côté php?

Merci d'avance
darkgloom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 10h51   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
as tu regardé le petit papier de SQLPro avec les hôtels ? ici je crois

sinon recherche dans ces publis de SQLPRO, normalement le bonheur y est
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 10h51   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
BETWEEN n'est pas spécifique au PL/SQL...

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 10h54   #4
Invité de passage
 
Inscription : avril 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 11
Points : 3
Points : 3
Je parlais de Pl-sql car ça aurait permis de regarder ligne par ligne facilement.
Entre temps j'ai eu une idée, une requête de ce type fonctionnerait-elle :

Code :
1
2
3
SELECT id 
FROM Reservation 
WHERE start_date <= ".$date." AND end_date >= ".$date + $duree." AND idLogement= '".$idLogement."'";
Si elle ne renvoie rien, c'est que le logement n'est pas occupé sur cette période non?

$date + $dure ne fonctionne évidemment pas mais c'est pour l'idée

Je vais jeter un oeil à ton papier olivier, merci.
darkgloom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 12h26   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 022
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 022
Points : 18 308
Points : 18 308
Envoyer un message via MSN à CinePhil
Si tu cherches les logements disponibles pendant la période définie par tes variables PHP, essaie la requête suivante, à adapter à ta structure réelle.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT l.id
FROM logement l
WHERE NOT EXISTS
(
  SELECT *
  FROM reservation r
  WHERE r.idLogement = l.id
    AND 
    (
      r.start_date BETWEEN '$date' AND ADD_DATE('$date', INTERVAL $duree DAY)
      OR r.end_date BETWEEN '$date' AND ADD_DATE('$date', INTERVAL $duree DAY)
    )
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/07/2011, 14h26   #6
Invité de passage
 
Inscription : avril 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 11
Points : 3
Points : 3
Citation:
Envoyé par CinePhil Voir le message
Si tu cherches les logements disponibles pendant la période définie par tes variables PHP, essaie la requête suivante, à adapter à ta structure réelle.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT l.id
FROM logement l
WHERE NOT EXISTS
(
  SELECT *
  FROM reservation r
  WHERE r.idLogement = l.id
    AND 
    (
      r.start_date BETWEEN '$date' AND ADD_DATE('$date', INTERVAL $duree DAY)
      OR r.end_date BETWEEN '$date' AND ADD_DATE('$date', INTERVAL $duree DAY)
    )
)
darkgloom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h50.


 
 
 
 
Partenaires

Hébergement Web