2013-08-19 24 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