[MySql]Probleme requete interval date début- date fin pour réservation

Probleme requete interval date début- date fin pour réservation [MySql] - SQL/NoSQL - Programmation

Marsh Posté le 21-02-2007 à 16:01:58    

Je cherche à gérer des réservatons pour des biens immobiliers. Pour ce faire je dois vérifier qu'une nouvelle réservation (qui a une date de debut et une date de fin) n'entre pas en conflit avec un reservation existant deja ds ma table et correspondant a un bien (une reservation etant aussi définie par un id de bien)
 
Voici la structure de ma table:
 
--  
-- Structure de la table `reservation`
--  
 
CREATE TABLE `reservation` (
`id` int(7) NOT NULL auto_increment COMMENT 'id de la reservation',
`dd` date default NULL COMMENT 'date debut reservation',
`df` date default NULL COMMENT 'date fin reservation',
`b_id` int(7) default NULL COMMENT 'id de la villa correspondant a la reservation',
`util_id` int(7) default NULL COMMENT 'id du client correspondant a la reservation',
`confirm` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;
 
--  
-- Contenu de la table `reservation`
--  
 
INSERT INTO `reservation` (`id`, `dd`, `df`, `b_id`, `util_id`, `confirm`) VALUES  
(1, '2007-02-17', '2007-02-24', 1, NULL, 0),
(2, '2007-02-02', '2007-02-10', 1, NULL, 0),
(59, '2007-02-02', '2007-02-10', 2, NULL, 0);
 
 
Et ma requete qui "soit disant devait me permettre de vérifier qu un interval de temps pour une reservation (et donc pr un bien immo) n'entrait pas en conflit avec une reservation existante correspondant à ce meme bien"
 
 
Exemple:
Je veux rentrer une nouvelle réservation avec date debut= '2007-02-11' et
date fin '2007-02-17' qui concerne le bien 2 (b_id=2). Je dois donc avoir en sortie aucun résultat car je fais un tri sur l'id du bien. Pourtant en sortie j'ai un résultat qui concern le bien n°1. Donc voilà impossible de vérifier à une vérification correcte avant insertion. Je sais que ma requête est bizarroide et que j'ai du me faire des chaussettes.  
 
Requete:
SELECT * FROM reservation  
WHERE '2007-02-11' BETWEEN dd AND df OR '2007-02-17' BETWEEN dd AND df OR dd BETWEEN '2007-02-11' AND '2007-02-17' AND df BETWEEN '2007-02-11' AND '2007-02-17' AND b_id =2 LIMIT 0 , 30
 
Si quelqu'un à la gentilesse de tester mon exemple ou une idée concernant la requete ou la structure de la table je suis preneur.  
 
Merci.

Reply

Marsh Posté le 21-02-2007 à 16:01:58   

Reply

Marsh Posté le 02-09-2009 à 16:28:37    


ça devrait marcher avec ça :  
 
SELECT *  
FROM
(
 SELECT * FROM reservation  
 WHERE '2007-02-11' BETWEEN dd AND df  
 OR    '2007-02-17' BETWEEN dd AND df  
 OR  dd BETWEEN '2007-02-11' AND '2007-02-17'  
 AND df BETWEEN '2007-02-11' AND '2007-02-17'  
 
) AS A
WHERE A.b_id =2


Message édité par sibko le 02-09-2009 à 16:32:18
Reply

Marsh Posté le 03-09-2009 à 02:41:05    

Plus simple :

Code :
  1. SELECT * FROM reservation 
  2. WHERE STR_TO_DATE('2007-02-11','%Y-%m-%d') BETWEEN dd AND df
  3. OR STR_TO_DATE('2007-02-17','%Y-%m-%d') BETWEEN dd AND df AND b_id =2 LIMIT 0 , 30

Reply

Marsh Posté le 16-06-2012 à 09:56:15    

Merci

Reply

Marsh Posté le 19-05-2017 à 12:01:45    

Merci.
C'est tout bête, et pourtant je m'arrachait les cheveux sur un cas similaire.

Reply

Sujets relatifs:

Leave a Replay

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