Ich versuche, die freie Zeit Slots für einen Tag zu finden, aber ich bin auf der richtigen Abfrage stecken. Die Öffnungszeiten oder der Tag läuft zwischen 9:00 bis 22:00 jeden Tag die folgende Abfrage gibt die richtigen Daten durch den Tag, außer wenn die erste der Buchung des Tages um 10:00 Uhr ist, wird nicht die nicht gebuchten Slot zwischen 9:00 und 10:00 Uhr und wenn es von 21:30 bis 21:40 Uhr gebucht wird, wird nicht der letzte freie Platz angezeigt.Mysql Finden Sie freie Zeit Slots zwischen Terminen
in der Minute, um dies für jeden Tag zu umgehen und set_id ich muss einen Tag beginnen und Tag 1 Minute Eintrag im Einsatz als ID = 1 und ID = 6 dargestellt.
Ich versuche, aus, die erstellen, um diese beiden Einsätze für jeden Tag, um weg und jeder set_id
CREATE TABLE bookings
(`id` int, `time_from` datetime, `time_to` datetime, `set_id` int);
INSERT INTO bookings
(`id`, `time_from`, `time_to`, `set_id`)
VALUES
(1, '2013-11-20 08:59:00', '2013-11-20 09:00:00', 6),
(2, '2013-11-20 09:10:00', '2013-11-20 10:00:00', 6),
(3, '2013-11-20 11:10:00', '2013-11-20 11:30:00', 6),
(4, '2013-11-20 12:00:00', '2013-11-20 12:40:00', 6),
(5, '2013-11-20 16:20:00', '2013-11-20 16:50:00', 6),
(6, '2013-11-20 22:00:00', '2013-11-20 22:01:00', 6)
;
SELECT Available_from, Available_to
FROM (
SELECT @lasttime_to AS Available_from, time_from AS Available_to, @lasttime_to := time_to
FROM (SELECT time_from, time_to
FROM bookings
WHERE set_id = 6
AND time_to >= '2013-11-20 08:59'
AND time_from < '2013-11-20 22:01'
ORDER BY time_from) e
JOIN (SELECT @lasttime_to := NULL) init) x
WHERE Available_to > DATE_ADD(Available_from, INTERVAL 9 MINUTE);
| AVAILABLE_FROM | AVAILABLE_TO |
|---------------------|---------------------------------|
| 2013-11-20 09:00:00 | November, 20 2013 09:10:00+0000 |
| 2013-11-20 10:00:00 | November, 20 2013 11:10:00+0000 |
| 2013-11-20 11:30:00 | November, 20 2013 12:00:00+0000 |
| 2013-11-20 12:40:00 | November, 20 2013 16:20:00+0000 |
| 2013-11-20 16:50:00 | November, 20 2013 22:00:00+0000 |
jede mögliche Hilfe würde geschätzt.
http://www.sqlfiddle.com/#!2/b30a0/2
CREATE TABLE `days` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`time_from` datetime NOT NULL,
`time_to` datetime NOT NULL,
`step` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `days` (`id`, `date`, `time_from`, `time_to`, `step`)
VALUES
(1, '2013-11-20', '2013-11-20 09:00:00', '2013-11-20 22:00:00', 10),
(2, '2013-11-21', '2013-11-21 09:00:00', '2013-11-21 22:00:00', 10);
A Little Closer!
INSERT INTO `bookings` (`id`, `date`, `time_from`, `time_to`, `set_id`, `name`, `email`, `telephone`, `amount`, `notes`, `is_paid`, `is_booked`)
VALUES
(25, '2013-11-20', '2013-11-20 09:10:00', '2013-11-20 09:30:00', 1, '', '', '', NULL, NULL, 0, 0),
(26, '2013-11-20', '2013-11-20 10:30:00', '2013-11-20 11:30:00', 1, '', '', '', NULL, NULL, 0, 0),
(27, '2013-11-20', '2013-11-20 12:30:00', '2013-11-20 13:20:00', 1, '', '', '', NULL, NULL, 0, 0),
(29, '2013-11-20', '2013-11-20 15:00:00', '2013-11-20 16:40:00', 1, '', '', '', NULL, NULL, 0, 0);
Das ist, was ich
availableFrom availableTo
9:00 2013-11-20 09:10:00
2013-11-20 09:30:00 2013-11-20 10:30:00
2013-11-20 11:30:00 2013-11-20 12:30:00
9:00 2013-11-20 15:00:00
2013-11-20 15:00:00 22:00
Vielen Dank für die Antwort, wo würde ich brauche Die Union? – Tim
Ich habe eine Tabelle Tage mit ID, Datum, time_from, time_to, Schritt – Tim
also ID = 1, Datum = 2013-11-20, time_from = 2013-11-20 09:00:00, time_to = 2013-11- 20, step = 10 – Tim