2010-09-17 76 views
0

我有一个表,试图过滤特定日期之间的特定ID(摆脱)......但!所得到的是一个不考虑ID(rid)作为条件的查询。问题与MySQL查询

这是查询:

SELECT * FROM booking 
    WHERE '2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY 
    OR '2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto 
    OR datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY 
    AND **rid = '5' 
    AND active = '1'** 
    LIMIT 0 , 30 

这是预订的表结构:

bid  gid  rid  datefrom  dateto   active 
================================================================= 
1  1  1  2010-09-16  2010-09-20  1 
8  9  2  2010-09-06  2010-09-16  1 
7  8  2  2010-09-23  2010-09-28  1 

回答

3

尝试使用括号内为日期条件:

SELECT * FROM booking 
    WHERE rid = '5' 
    AND active = '1' 
    AND ('2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY 
    OR '2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto 
    OR datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY) 
    LIMIT 0 , 30 
+0

感谢您的支持,现在可以正常工作。 – majimoto 2010-09-17 06:18:46

+0

@majimoto:不要忘记接受正确的答案(使用勾号) – abatishchev 2010-09-17 06:21:14

0

试试这个

SELECT * FROM booking WHERE 
('2010-10-01' BETWEEN datefrom AND dateto - INTERVAL 1 DAY) 
OR ('2010-10-09' BETWEEN datefrom + INTERVAL 1 DAY AND dateto) 
OR (datefrom BETWEEN '2010-10-01' AND '2010-10-09' - INTERVAL 1 DAY) 
AND rid = '5' AND active = '1' 
LIMIT 0 , 30 
+0

与我的查询有同样的问题......但Michael Pakhantsov的解决方案正常工作 – majimoto 2010-09-17 06:20:08

0

我认为你需要围绕所有OR条件使用一些括号作为一个组,以便它知道如何在最后应用AND条件。