Bảng này được sử dụng để lưu trữ phiên (sự kiện):Kiểm tra chồng chéo của các phạm vi ngày trong MySQL
CREATE TABLE session (
id int(11) NOT NULL AUTO_INCREMENT
, start_date date
, end_date date
);
INSERT INTO session
(start_date, end_date)
VALUES
("2010-01-01", "2010-01-10")
, ("2010-01-20", "2010-01-30")
, ("2010-02-01", "2010-02-15")
;
Chúng tôi không muốn có xung đột giữa dãy.
Giả sử chúng ta cần chèn một phiên mới từ 2010-01-05 đến 2010-01-25.
Chúng tôi muốn biết (các) phiên xung đột.
Đây là câu hỏi của tôi:
SELECT *
FROM session
WHERE "2010-01-05" BETWEEN start_date AND end_date
OR "2010-01-25" BETWEEN start_date AND end_date
OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date
;
Dưới đây là kết quả:
+----+------------+------------+
| id | start_date | end_date |
+----+------------+------------+
| 1 | 2010-01-01 | 2010-01-10 |
| 2 | 2010-01-20 | 2010-01-30 |
+----+------------+------------+
Có cách nào tốt hơn để có được điều đó?
Điều kiện thứ ba của bạn sai. Nó được cho là "" 2010-01-05 "<= ngày bắt đầu và" 2010-01-25 "> = end_date'. Xem http://stackoverflow.com/a/28802972/632951 để trực quan hóa. Điều kiện thứ ba hiện tại của bạn sẽ không bao giờ đánh giá, bởi vì điều kiện thứ nhất (và thứ hai) đã bao gồm nó. – Pacerier