2014-07-22 137 views
-1

爲什麼此查詢未考慮「c.max_no_people < = $ max_guests」的Where子句?MySQL Double Join with Multiple Where Clauses

SELECT DISTINCT a.id, b.post_id, c.max_no_people 
FROM wp_dopbsp_reservations a 
    INNER JOIN wp_dopbsp_calendars b 
    ON (b.id = a.calendar_id) 
    INNER JOIN wp_dopbsp_settings c 
    ON (b.id = c.calendar_id) 
WHERE (a.check_out >= \"$check_in\" 
      AND a.check_in < \"$check_out\" 
      OR a.check_out <= \"$check_in\" 
      AND a.check_in > \"$check_out\") 
    AND (c.max_no_people <= $max_guests) 
    AND (a.status = 'approved') 

在此先感謝。

回答

1

試試這個:

SELECT DISTINCT a.id, b.post_id, c.max_no_people 
FROM wp_dopbsp_reservations a 
INNER JOIN wp_dopbsp_calendars b 
ON (b.id = a.calendar_id) 
INNER JOIN wp_dopbsp_settings c 
ON (b.id = c.calendar_id) 
WHERE a.check_out >= \"$check_in\" 
     AND (a.check_in < \"$check_out\" 
     OR a.check_out <= \"$check_in\") 
     AND a.check_in > \"$check_out\" 
AND (c.max_no_people <= $max_guests) 
AND (a.status = 'approved') 

這是因爲你給OR語句,而不在狀態,其中使用括號。所以它只會考慮OR語句。

+0

我的壞。現在編輯它:) – Torrezzzz

+0

感謝您的答案!奇怪的是,我仍然沒有得到預期的結果。即使$ max_guests小於或等於DB中存儲的值,它也會返回保留。 – user960487

1

嗯,我認爲這個問題是在這裏

(a.check_out >= \"$check_in\" 
AND a.check_in < \"$check_out\" 
OR a.check_out <= \"$check_in\" 
AND a.check_in > \"$check_out\") 

豈不是:

(
(a.check_out >= \"$check_in\" 
AND a.check_in < \"$check_out\") OR 
(a.check_out <= \"$check_in\" 
AND a.check_in > \"$check_out\") 
) 

也難逃$ max_guests樣(INT)$ max_guests