Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kalender Pemesanan Tanggal Tiba &Berangkat

Simak berikut ini...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(book_id  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,arrive_date DATE NOT NULL
,depart_date DATE NOT NULL
);

INSERT INTO my_table VALUES
(1,'2015-07-20','2015-07-22'),
(2,'2015-07-22','2015-07-23'),
(3,'2015-07-19','2015-07-20');

SELECT * FROM my_table;
+---------+-------------+-------------+
| book_id | arrive_date | depart_date |
+---------+-------------+-------------+
|       1 | 2015-07-20  | 2015-07-22  |
|       2 | 2015-07-22  | 2015-07-23  |
|       3 | 2015-07-19  | 2015-07-20  |
+---------+-------------+-------------+

Jadi, SELECT mungkin terlihat seperti ini...

SELECT '2015-07-22','2015-07-24' 
  FROM (SELECT 1) x 
  LEFT 
  JOIN my_table y
    ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-22'
 WHERE y.book_id IS NULL 
 LIMIT 1;
Empty set (0.00 sec)

SELECT '2015-07-23','2015-07-24' 
  FROM (SELECT 1) x 
  LEFT 
  JOIN my_table y
    ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-23'
 WHERE y.book_id IS NULL 
 LIMIT 1;
+------------+------------+
| 2015-07-23 | 2015-07-24 |
+------------+------------+
| 2015-07-23 | 2015-07-24 |
+------------+------------+

...tapi Anda tidak perlu memeriksanya terlebih dahulu. Saya sengaja menulis SELECT sedemikian rupa sehingga pemeriksaan dapat terjadi sebagai bagian dari INSERT...

INSERT INTO my_table (arrive_date,depart_date)
SELECT '2015-07-23','2015-07-24' 
  FROM (SELECT 1) x 
  LEFT 
  JOIN my_table y
    ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-23'
 WHERE y.book_id IS NULL 
 LIMIT 1;

SELECT * FROM my_table;
+---------+-------------+-------------+
| book_id | arrive_date | depart_date |
+---------+-------------+-------------+
|       1 | 2015-07-20  | 2015-07-22  |
|       2 | 2015-07-22  | 2015-07-23  |
|       3 | 2015-07-19  | 2015-07-20  |
|       4 | 2015-07-23  | 2015-07-24  |
+---------+-------------+-------------+

Dalam praktiknya, dan bergantung pada pengalaman pengguna yang ingin Anda berikan, Anda mungkin ingin menjalankan SELECT terlebih dahulu, sehingga pengguna dapat segera melihat tanggal mana yang tidak tersedia, lalu menjalankan INSERT saat melakukan pemesanan - untuk memastikan tidak ada yang mengambil tanggal tersebut saat pengguna sedang melakukan pemesanan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa kueri penyisipan terkadang membutuhkan waktu lama untuk diselesaikan?

  2. Cara mendapatkan semua data dari 2 tabel menggunakan kunci asing

  3. Manajemen inventaris dengan opsi saham

  4. Spring Boot:Jdbc javax.net.ssl.SSLException:menutup masuk sebelum menerima close_notify rekan

  5. python odo sql AssertionError:datashape harus tipe Record, dapat 0 * {...}