0

2 つのテーブル、レストラン、注文があり、各レストランには多くの注文があります

restaurants table
id
name


orders table
id
restaurant_id
date
status

ある日付に注文がない場合-注文テーブルに行がないことを意味します。注文がある場合、そのステータスは 0、1、または 2 のいずれかです。orders テーブルの各行は 1 日を表します。

2013-08-15たとえば、 ~の間2013-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

どうすればその条件も追加できますか?

ありがとう

4

1 に答える 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

于 2014-08-07T00:48:22.683 に答える