私は2つのテーブル、レストラン、受注テーブルを持っていますrestaurant_id
、status
とdate
フィールドは、毎日注文テーブルの別の行です。右の状態から少なくとも1つの行と結合しました
私は、レストランをフィルタリングし、いくつかの日付範囲の少なくとも1つの予約を持っているレストランを表示する必要がありますが、カレンダーに表示する必要があります、それは情報のレストランのリストのように見えるはずです。
なめらかだから、この
のように、それはat least one day with reserved status
条件はその日付の範囲で満たされている場合は、そのレストランのためにその日付範囲のすべての注文が同様にフェッチされなければならないことを意味しています。
それは、日付の怒りであるかのため、この場合には、例えば、私は、restaurant2のため、8月31日の注文情報を持っていない、ので、私は、いつもの内部結合
SELECT r.`id`, r.`name`, o.`date`, o.`status`
FROM restaurants r
INNER JOIN orders o ON r.id = o.restaurant_id AND o.date BETWEEN '2013-08-10' AND '2013-08-31'
AND status = 'reserved'
をすることはできません10から31までですが、そのステータスは '閉じています'。 だから、私は左を作るために考えていますが、この
SELECT r.`id`, r.`name`, o.`date`, o.`status`, o.`id` order_id
FROM restaurants r
LEFT JOIN orders o ON r.id = o.restaurant_id AND
o.date BETWEEN '2013-08-10' AND '2013-08-31'
WHERE o.`id` IS NOT NULL
のように参加しかし、私はまた、オーダーのステータス=「予約」は、少なくとも一つの行があることを確認するために、1つの条件を追加する必要があり、私はどこに追加してみましたCOUNT(o.status = 1) > 0
のような節ですが、エラーが発生します。
おかげ
そして、Yの状態が予約されている少なくとも1つのレコードでrestauantsを取得するには、サブクエリを使用してください。 o内部結合を使用できます。 –
@ダンブラックあなたはそれについて少し拡大できますか?おかげで – dav