Ho 2 tabelle del database con i seguenti attributi:MySQL - Trovare il tempo si sovrappone
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
La seconda tabella è un'entità associativa tra "prenotazione" e "risorse" (vale a dire, 1 prenotazione può contenere molti risorse). Gli attributi booking_start e booking_end sono timestamp con data e ora al suo interno.
Posso sapere come potrei essere in grado di scoprire per ogni resource_id (resource_booked) se la data/ora si sovrappone o si scontra con altre prenotazioni di resource_id simili?
stavo scarabocchiare la risposta su carta, pittoricamente, per vedere se poteva aiutarmi visualizzo come potrei risolvere questo e ho ottenuto questo:
- Unire i 2 tavoli (di prenotazione, Booked_resource) in una tabella con i 4 attributi necessari.
- Seguire la risposta suggerito qui: Find overlapping (date/time) rows within one table
ho fatto passo 1, ma il passaggio 2 sta lasciando me sconcertato!
Apprezzerei davvero qualsiasi aiuto su questo! Grazie!
EDIT: Stavo leggendo la risposta di Mr Renshaw e provato a fare uno da solo per vedere se ho capito e ho ottenuto il concetto:
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
ho penso stavo cercando di creare 2 tabelle identiche e unisciti a resource_id, trova i record con ID di risorsa simile ma diverso booking_id e verifica se il tempo di prenotazione di un'ora di registrazione di uno (booking_id) è compreso tra il booking_start e il booking_end di un altro (booking_id).
È davvero caotico e non ero nemmeno sicuro se la mia domanda fosse quella che avevo in mente, ma per qualche miracolo ho avuto la stessa risposta di Mr Renshaw!
Per qualche motivo, sto ottenendo "duplicati" di determinati record Come: * b2.booking_id | b2.creation_date | rb1.resource_id | b1.creation_date | b1.booking_id * ** 23 | 2006-08-31 13: 21: 25.0 | 12 | 2006-09-05 14: 12: 17.0 | 21 ** E un'altra riga in basso: ** 21 | 2006-09-05 14: 12: 17.0 | 12 | 2006-08-31 13: 21: 25.0 | 23 ** – Cuppy
Ho aggiunto un'altra clausola WHERE che controlla se b1.creation_date> = b2.creation_date in modo che solo le prenotazioni effettuate in seguito vengano visualizzate e sembra funzionare! Grazie ancora! – Cuppy