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

mysql शो टाइम स्लॉट उपलब्ध हैं और टाइम स्लॉट टेबल से व्यस्त हैं

ठीक है, शुद्ध MySQL - जब तक कोई उन चालों को पसंद करता है। मुझे एक वेरिएबल की आवश्यकता है जो दिखाने के लिए अवधि के "शुरुआत" के लिए प्रारंभ किया गया है, कुछ ऐसा अब() सामान्य रूप से।

पहले केवल परीक्षण डेटा:

create table bookingEvents 
   (id int not null primary key auto_increment,
    timeBooked datetime, 
    duration int
   );


insert into bookingEvents values (null, '2013-05-13 13:22:00', 15);
insert into bookingEvents values (null, '2013-05-13 15:10:00', 45);
insert into bookingEvents values (null, '2013-05-13 19:55:00', 30);
insert into bookingEvents values (null, '2013-05-14 03:22:00', 15);
insert into bookingEvents values (null, '2013-05-14 08:19:00', 15);

फिर "स्लाइडर" को इनिशियलाइज़ करना:

set @timeSlider='2013-05-10 00:00:00';

फिर चुनें:

select if (d.name = 'Free', @timeSlider, b.timeBooked) as free_from,
       if (d.name = 'Free', b.timeBooked, @timeSlider := b.timeBooked + interval b.duration minute) as free_until,
       d.name as Free
from (select 1 as place, 'Free' as name union select 2 as place, 'Booked' as name) d 
inner join bookingEvents b 
having free_from < free_until
order by b.timeBooked, d.place;

परिणाम:

+---------------------+---------------------+--------+
| free_from           | free_until          | Free   |
+---------------------+---------------------+--------+
| 2013-05-10 00:00:00 | 2013-05-13 13:22:00 | Free   |
| 2013-05-13 13:22:00 | 2013-05-13 13:37:00 | Booked |
| 2013-05-13 13:37:00 | 2013-05-13 15:10:00 | Free   |
| 2013-05-13 15:10:00 | 2013-05-13 15:55:00 | Booked |
| 2013-05-13 15:55:00 | 2013-05-13 19:55:00 | Free   |
| 2013-05-13 19:55:00 | 2013-05-13 20:25:00 | Booked |
| 2013-05-13 20:25:00 | 2013-05-14 03:22:00 | Free   |
| 2013-05-14 03:22:00 | 2013-05-14 03:37:00 | Booked |
| 2013-05-14 03:37:00 | 2013-05-14 08:19:00 | Free   |
| 2013-05-14 08:19:00 | 2013-05-14 08:34:00 | Booked |
+---------------------+---------------------+--------+

यदि आपके पास दिया गया एंड-टाइमस्टैम्प है, तो आपको उसे @timeMaximum

के रूप में पहले से सेट करना होगा
set @timeSlider='2013-05-10 00:00:00';
set @timeMaximum='2013-05-14 08:35:00';


select if (d.name = 'Free', @timeSlider, b.timeBooked) as free_from,
       if (d.name = 'Free', b.timeBooked, @timeSlider := b.timeBooked + interval b.duration minute) as free_until,
       d.name as Free
from (select 1 as place, 'Free' as name union select 2 as place, 'Booked' as name ) as d 
inner join bookingEvents b 
having free_from < free_until
union select @timeSlider as free_from, @timeMaximum as free_until, 'Free' as Free
from (select 1) as d
where @timeSlider < @timeMaximum

order by free_from, free_until
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. माईएसक्यूएल जीयूआई प्रोग्राम

  2. MySQL और PHP के लिए CRUD

  3. MySQL में पंक्ति मान को 1 से बढ़ाएँ और घटाएँ

  4. पीडीओ के साथ कुछ मौजूद है या नहीं, यह जांचने का सबसे अच्छा तरीका क्या है?

  5. MySQL में कई-से-अनेक कनेक्शन के लिए लिंकिंग तालिका को ठीक से कैसे अनुक्रमित करें?