2013-08-19 47 views
0

我有2個表,餐館和訂單,每個餐廳有很多訂單找到包含日期範圍目前MySQL的加入

restaurants table 
id 
name 


orders table 
id 
restaurant_id 
date 
status 

如果某個日期沒有訂單 - 這意味着在訂單表沒有行。如果有訂單,其狀態可以是0,1或2.訂單表中的每一行代表一天。

我需要找到那些餐館,2013-08-152013-08-25之間說(包括當前日 - 2013-08-19)不必在所有的訂單(這意味着在訂單表中沒有相應的行),或有訂單狀態0或1,但是隨着這些條件,今天的訂單應該具有狀態-2。因此,如果一些餐館今天沒有訂單或者它的狀態不是2--這個餐館不應該被列在結果中,但是如果訂單今天存在且其狀態爲2,結果應該包含具有上述日期範圍的所有訂單列表的餐廳。

通過此查詢我得到的結果沒有今天的條件的一部分。

SELECT r.`id`, r.`name` 
FROM restaurants r 
LEFT JOIN orders o ON r.id = o.restaurant_id AND o.date between '2013-08-15' AND '2013-08-25' 
where o.id is null OR o.`status` = 0 OR o.status = 1 

我如何可以添加條件呢?

謝謝

回答

0

我會單獨做查詢,並採取結果的聯合。 今天排除您的查詢,請爲今天添加單獨的查詢。 類似於:

SELECT r.id, r.name FROM restaurants r LEFT JOIN orders o ON r.id = o.restaurant_id AND o.date between '2013-08-15' AND '2013-08-25' AND o.date <> '2013-08-19' -- current day where o.id is null OR o.status = 0 OR o.status = 1 UNION SELECT r.id, r.name FROM restaurants r INNER JOIN orders o ON r.id = o.restaurant_id AND o.date = '2013-08-19' -- current day where o.status = 2