PHP/MySQL で予約システムを作成しています。
月を選択し、予約の長さを選択し、その月内に指定された長さの期間が利用可能な (つまり、予約済みとしてマークされていない) 期間を見つけられるようにしたいと考えています。
日付のテーブルを作成することから始めました。各日には、予約されているかどうかを示すフィールドと日付があります。2 つのテーブルは次のとおりです。
CREATE TABLE `day` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`booking` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `booking` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start` date DEFAULT NULL,
`end` date DEFAULT NULL,
PRIMARY KEY (`id`)
)
これまでのところ、1 か月のうち予約されていない日数を数えることはできましたが、7 日連続して予約されているとは限りません。
SELECT
EXTRACT(YEAR FROM date) as year,
EXTRACT( MONTH FROM date) as month,
count(day.id)
FROM
day
WHERE booking IS NULL
GROUP BY year, month
この時点で、特定の月のすべての日をロードし、PHP でそれらを繰り返し処理して数値を作成することを検討していますが、それはちょっとばかげていて非効率的です。この情報を MySQL から直接見つける方法を提案する人はいますか?