Menyemak Julat Tarikh Bertindih dalam MySQL: Penyelesaian Dioptimumkan
Dalam senario ini, kami mempunyai jadual yang dipanggil 'sesi' yang menyimpan acara dengan tarikh mula dan tamat. Apabila memasukkan acara baharu, adalah penting untuk mengelakkan konflik dengan sesi sedia ada.
Pendekatan biasa melibatkan penggunaan perbandingan tarikh untuk mengenal pasti pertindihan:
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;
Walau bagaimanapun, kaedah ini tidak selalu berkesan untuk menyemak set data yang besar. Penyelesaian yang dioptimumkan boleh dicapai menggunakan formula berikut:
WHERE new_start < existing_end AND new_end > existing_start;
Formula ini secara berkesan membandingkan tarikh mula dan tamat acara baharu (new_start dan new_end) dengan tarikh mula dan tamat acara sedia ada (existing_start dan sedia ada_akhir). Jika syarat ini benar, pertindihan wujud.
Untuk menggambarkan pendekatan ini, pertimbangkan jadual berikut:
id | start_date | end_date |
---|---|---|
1 | 2010-01-01 | 2010-01-10 |
2 | 2010-01-20 | 2010-01-30 |
Mari kita semak pertindihan dengan acara baharu dari 2010-01-05 hingga 2010-01-25:
ns | ne | es | ee | Overlap |
---|---|---|---|---|
2010-01-05 | 2010-01-25 | 2010-01-01 | 2010-01-10 | Yes |
2010-01-05 | 2010-01-25 | 2010-01-20 | 2010-01-30 | Yes |
Seperti yang anda lihat, acara baharu bertindih dengan kedua-dua sesi sedia ada. Pendekatan ini menyediakan cara yang cekap dan tepat untuk menyemak julat tarikh bertindih dalam MySQL, memastikan konflik dikesan dan diselesaikan dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk memeriksa julat tarikh yang bertindih dengan cekap dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!