[PHP/MySQL] Query op basis van tijdrange

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het schrijven van een query en volgens mij zit ik veel te lastig te denken, zal wel komen door TE veel werken van de afgelopen dagen.

De bedoeling is dat er 1 record uit komt rollen (dus een limit 0,1) , er word geselecteerd op alles wat in de tabel staan (SELECT *) en het moet aan een aantal eisen voldoen:

- het veld ACTIEF = 1
- de datum van vandaag is kleiner of gelijk aan de datum in het veld SPEELDATUM
- de tijd van vandaag is kleiner dan de tijd in het veld SPEELTIJD

dus eigenlijk moet alles weergeven worden dat ACTIEF 1 is en waarbij de datum/tijd nog VOOR de gegeven in SPEELTIJD/SPEELDATUM is.

Ik heb zelf het volgende geprobeerd maar dit werkt niet echt:

code:
1
2
3
4
SELECT * FROM `wedstrijd` 
WHERE actief = '1' 
AND speeldatum >= '2004-03-23' 
AND speeltijd >= "14:10:00"


Het probleem waar ik tegenaan loop is dat als er op 24-03-2004 een wedstrijd zou zijn om 13:00 uur zou die ook geselecteerd moeten worden, maar dit werkt dus niet..

Wat zie ik over het hoofd? :/

Acties:
  • 0 Henk 'm!

Verwijderd

Probeer eens een constructie als deze...

SELECT * FROM pet WHERE (species = "cat" AND sex = "m")
OR (species = "cat");

Hier kan je dus de species vervangen door de datum en dan sex door de tijd? De actief variabele kan je er natuurlijk ook bijggoeien. Hoop dat dit helpt.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Waarom heb je de datum en de tijd eigenlijk in een appart veld gezet? Dat is waar je nu tegenaan loopt. Misschien toch overwegen om je datamodel aan te passen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
code:
1
2
3
4
SELECT * FROM `wedstrijd` 
WHERE actief = '1' 
AND NOW() < speeldatum
OR (  NOW() = speeldatum AND NOW() < speeltijd);


[edit] verkeerd gelezen.
[edit2] verder is wat Janoz zei wel een goeie tip. Datetime bestaat er niet voor niks.

[ Voor 100% gewijzigd door Grijze Vos op 23-03-2004 14:27 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 07-09 06:15

Vae Victis

Dark Lord of the Sith

code:
1
2
3
SELECT * FROM `wedstrijd` 
WHERE actief = '1' 
AND ((speeldatum > '2004-03-23') OR (speeldatum = '2004-03-23' AND speeltijd >= "14:10:00"))

(speeldatum > '2004-03-23') -> als speeldatum groter is dan vandaag hoef je al niet op tijd te selecteren.
(speeldatum = '2004-03-23' AND speeltijd >= "14:10:00")-> als datum gelijk is aan vandaag dan moet speeltijd hoger of gelijk zijn aan tijd vandaag.

Als ik het goed begrepen heb ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je hebt inderdaad gelijk! Zo werkt het! Die optie had ik over het hoofd gezien :)
Pagina: 1