Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

बुकिंग कैलेंडर आगमन और प्रस्थान तिथियां

निम्नलिखित पर विचार करें...

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  |
+---------+-------------+-------------+

तो, चयन कुछ इस तरह दिख सकते हैं...

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 |
+------------+------------+

...लेकिन आपको पहले उनकी जांच करने की आवश्यकता नहीं है। मैंने जानबूझकर SELECTs को इस तरह लिखा है कि चेक 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  |
+---------+-------------+-------------+

व्यवहार में, और उस उपयोगकर्ता अनुभव के आधार पर जिसे आप प्रदान करना चाहते हैं, आप पहले SELECTs चलाना चाहते हैं, ताकि उपयोगकर्ता तुरंत देख सके कि कौन सी तिथियां उपलब्ध नहीं हैं, और फिर जब बुकिंग करने की बात आती है तो INSERT चलाएँ - यह सुनिश्चित करने के लिए कि जब उपयोगकर्ता बुकिंग के बीच में था तब किसी ने उन तारीखों को नहीं पकड़ा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql संग्रहीत कार्यविधि जो स्वयं को पुनरावर्ती रूप से कॉल करती है

  2. date_format के साथ mysql तारीख की तुलना

  3. 1052:फ़ील्ड सूची में कॉलम 'आईडी' अस्पष्ट है

  4. mysql में महीने और साल के हिसाब से तारीखों की तुलना करना

  5. पायथन माइस्क्ल, सिंक से बाहर आदेश; आप अभी यह आदेश नहीं चला सकते हैं