[MySQL] Datums tussen 2 waarden vinden

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Tabel
code:
1
2
3
4
5
6
7
ID| FROMDATE         | TODATE           | LOCKED
------------------------------------------------
1 | 2006-09-06 00:00 | 2006-09-06 01:00 | false
2 | 2006-09-06 01:00 | 2006-09-06 02:00 | false
3 | 2006-09-06 02:00 | 2006-09-06 03:00 | false
4 | 2006-09-06 03:00 | 2006-09-06 04:00 | true
------------------------------------------------
Nu wil ik via een query alle rijen bekomen die mogelijk in dezelfde tijdspanne als een nieuwe datum liggen: vb: 2006-09-06 01:30 - 2006-09-06 02:30; in dit geval zou dit 2 rijen moeten teruggeven: 2, 3

Ik krijg het maar niet uitgedrukt in een zinnige query... in ieder geval niet in een query die alle mogelijke cases dekt. Ik wil dus alle resultaten bekomen die binnen eenzelfde tijdspanne liggen...

Het laatste attribuut in de tabel toont aan of ze dubbel mogen zijn met een andere waarde. Dus er mag geen waarde in de tabel voorkomen die rij 4 ook maar enigzins overlapt .De overige rijen mogen wel overlapt worden qua tijdspanne.

Hoe zou ik mijn query het best kunnen opbouwen om dit na te gaan?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
MySQL:
1
2
3
4
SELECT * 
FROM Tabel 
WHERE (fromdate <= '2006-09-06 01:30' OR fromdate <= '2006-09-06 02:30')
AND (todate >= '2006-09-06 01:30' OR todate >= '2006-09-06 02:30');


zoiets? Weet niet of ie helemaal correct is nu, ik weet dat ik zelf ook eens zo'n probleem heb opgelost was nog best lastig.

If I can't fix it, it ain't broken.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Rijen binnen die tijdspanne zijn de rijen waarvoor geldt: TODATE na $begin EN FROMDATE voor $einde. Dit klinkt een beetje tegenintuïtief, maar als het intuïtief zou zijn was je er natuurlijk wel opgekomen. :P

Borizz zijn query komt hier op neer als je de overlappende vergelijkingen schrapt:
MySQL:
1
2
3
4
SELECT * 
FROM Tabel 
WHERE (fromdate <= '2006-09-06 02:30')
AND (todate >= '2006-09-06 01:30');

En dan wil je waarschijnlijk nog een where clause dat Locked true is en als je dan een niet-lege resultset terugkrijgt weet je dat er een conflict binnen die tijdspanne is. :)

{signature}


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Krijg dan toch geen rijen terug, terwijl je er eigenlijk toch 2 terug verwacht.. dergelijke query had ik trouwens al eens geprobeerd.. zonder resultaat echter (had ze er mss beter bijgezet).

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je moet toch echt rijen terug krijgen hoor. Zo niet dan klopt de vergelijking niet en dat zou dan zijn omdat er iets qua datatypes niet klopt, maar die datatypes weet je zelf wel. ;)

{signature}


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Draai de >= en <= 'ns om?

Developer Accused Of Unreadable Code Refuses To Comment


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Nee die staan goed, dus niet op de gok omdraaien. :z
Iets overlapt als het begonnen is voor het einde van een ander event én eindigt na het begin van dat andere event.

{signature}


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Vandaag nog maar eens getest en nu doet ie het blijkbaar wel gewoon.. vreemd; misschien was er nog ergens iets niet gecommit ofzo; gek, maar nou doet ie het wel gewoon :Y

Is er nog een andere manier om alle tijdspannes te vinden als er enkel een datum opgegeven wordt (zonder tijd dus). Dus als ik 2006-09-06 opgeef, wil ik alle rijen terugkrijgen:
code:
1
2
3
4
5
6
7
ID| FROMDATE         | TODATE           | LOCKED
------------------------------------------------
1 | 2006-09-05 00:00 | 2006-09-06 01:00 | false
2 | 2006-09-06 01:00 | 2006-09-07 02:00 | false
3 | 2006-09-05 02:00 | 2006-09-07 03:00 | false
4 | 2006-09-06 03:00 | 2006-09-06 04:00 | true
------------------------------------------------

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik zie het probleem niet, je weet nu al hoe je met een interval werkt, dus exact dezelfde query kan met een interval van de 1e minuut t/m de laatste minuut van die dag. B)

{signature}


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Heb je niets aan de date_diff() functie van MySQL?

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Voutloos schreef op donderdag 07 september 2006 @ 17:31:
Ik zie het probleem niet, je weet nu al hoe je met een interval werkt, dus exact dezelfde query kan met een interval van de 1e minuut t/m de laatste minuut van die dag. B)
Hmmm.. laten we het houden op een duf (typo) moment :X
Pagina: 1