Những điều sau đây sẽ giúp bạn thực hiện. bạn có thể muốn điều chỉnh mẫu hàm "Current_Date ()" của tôi cho bất kỳ ngày nào có thể là ngày bắt đầu đặt chỗ của bạn và đi ra ngoài nhiều ngày như vậy ....
Điều này sử dụng các biến nội tuyến của MySQL trong truy vấn. Truy vấn bên trong là một sự chuẩn bị đơn giản của một biến đặt trước (@r) dựa trên một số ngày bắt đầu (current_date ()) và tham gia vào bảng mục. Bằng cách không thực hiện điều khoản tham gia, nó sẽ có một ngày cho mọi mục. Trong trường hợp của tôi, tôi chỉ đang cân nhắc việc đi chơi trong 30 ngày, vì vậy tôi đã áp dụng giới hạn 30 mặt hàng đầu tiên. Không có cơ sở nào khác ngoài việc cung cấp cho tôi đủ hồ sơ để tôi không phải tạo một bảng tạm thời gồm 30 bản ghi (hoặc dù bạn muốn ra ngoài trong nhiều ngày). Điều này tạo ra một truy vấn bí danh "JustDates" và có một cột duy nhất là "OpenDate". Đây là cơ sở của phạm vi ngày để kiểm tra.
Điều này hiện được kết hợp với bảng mặt hàng, nhưng không có điều kiện nào tạo ra một hệ Descartes để nói cho mỗi ngày, so sánh với mọi mặt hàng ... theo mệnh đề WHERE, tôi chỉ quan tâm đến các mặt hàng có SKU của thời tiết "ABC123", chúng có 10 sê-ri. #s hoặc 100. Điều này hiện có thể mang lại cho tôi 300 hoặc 3000 (10 mặt hàng nối tiếp @ 30 ngày hoặc 100 mặt hàng nối tiếp @ 30 ngày.
Bây giờ tôi có một "phạm vi" của tất cả các số sê-ri riêng lẻ và những ngày có thể để kiểm tra tình trạng còn hàng, giờ tôi có thể truy vấn hệ thống đặt chỗ. Vì vậy, thông qua một lựa chọn phụ và KHÔNG VÀO cho một SKU phù hợp nhất định, SERIAL # và Ngày CÓ THỂ được tìm thấy trong đặt chỗ, tôi chỉ muốn giữ lại những người KHÔNG tìm thấy Ngày OpenDate đã cho. Tôi đã mô phỏng cấu trúc bảng của bạn và đưa vào một số ít các mục, nhiều số sê-ri và phạm vi ngày đặt trước bị đình trệ và nó hoạt động rất tốt ...
Rõ ràng, tôi sẽ đảm bảo các chỉ mục trên sku / serial về hiệu suất. Thay đổi bổ sung duy nhất mà tôi có thể thực hiện là khi truy vấn các đặt chỗ, để loại trừ bất kỳ đặt chỗ nào có ngày kết thúc trước ngày bắt đầu được đề cập cho truy vấn của BẠN, và theo tùy chọn, không có Ngày bắt đầu> ngày CUỐI CÙNG mà bạn đang xem xét. Nếu bạn có rất nhiều lượt đặt trước kéo dài nhiều năm, ai quan tâm đến điều gì đó cổ xưa hoặc điều gì đó trong tương lai từ phạm vi ngày được đề cập.
select items.sku,
items.serial_number,
JustDates.OpenDate
from
( SELECT
@r:= date_add(@r, interval 1 day ) OpenDate
FROM
(select @r := current_date()) vars,
items limit 30 ) JustDates,
items
where
sku = "ABC123"
and sku not in ( select sku from Reservations
where items.sku = reservations.sku
and items.serial_number = reservations.serial_number
and justDates.OpenDate >= reservations.start_date
and justDates.OpenDate <= reservations.end_date )
order by
items.serial_number,
justDates.OpenDate