restaurants
構造 のテーブルと、構造 のテーブルがid, name, table_count
ありorders
ますrestaruant_id, start_date, end_date, status
。ある日付範囲で利用可能なテーブルを見つけたい-利用可能なものとして-注文がないか、指定された日付範囲の確認済み予約(ステータス= 1)の数がテーブルの数よりも少ないと見なされますそのレストランを数えます。だから、私はこのクエリを使用します
SELECT r.id, r.name, r.table_count
FROM restaurants r
LEFT JOIN orders o
ON r.id = o.restaurant_id
WHERE o.id IS NULL
OR (r.table_count > (SELECT COUNT(*)
FROM orders o2
WHERE o2.restaurant_id = r.id AND o2.status = 1 AND
NOT(o.start_date >= '2013-09-10') AND NOT (o.end_date <= '2013-09-05')
)
)
それで、同じクエリを別の方法で作成できますか。私はこのように考えています。なぜなら、時間内に注文テーブルに数千行以上になる可能性があり、日付列をいくつかの日付範囲間で比較する必要があるため、列を追加すると結果が速くなるからですis_search
(mysqlを使用) index) の値を 1 または 0 に設定します。これは cron ジョブによって更新でき、定期的にチェックして過去の予約を 0 として作成します。そのため、検索中に日付範囲 ( tinyint列を1または0で比較するよりもはるかに高価だと思います)。または、その条件を追加すると、チェックするものがもう1つ追加され、逆の効果がありますか?
ありがとう