Ik heb een script voor een voetbal cup geschreven waar mensen op de Man of the Match kunnen stemmen. De wedstrijden worden opgeslagen als volgt:

columns
datum, tijd, thuis, uit, uitslag
d-m-Y, 00:00, teamnaam, teamnaam, 0-0

bv, 09-08-2014, 12:30, teamnaam, teamnaam, 3-3

Nu wil ik met ene query ervoor zorgen dat ik alleen de records laat zien, welke op de betreffende dag zijn en vanaf de tijd dat de wedstrijd begint, tot 100 minuten erna (Zodat ik 5 voor het einde van de wedstrijd de Man of the Match weet)

Nu heb ik deze query, waarmee ik al wel de wedstrijden van vandaag alleen te zien krijg:


$vandaag = date("d-m-Y");
$query 	= mysql_query("SELECT * FROM `wedstrijden` WHERE datum = '".$vandaag."'");

Maar nu wil ik de query dus aanpassen zodat alleen de wedstrijden van vandaag, plus die op dit moment gespeeld worden te zien krijg. Een wedstrijd duurt incl rust zon 105 minuten.

Ik dacht dat als volgt te doen

$query 	= mysql_query("SELECT * FROM `wedstrijden".$jaar."` WHERE datum = '".$vandaag."' AND tijd > DATE_SUB(now(), interval 100 minute)");

Maar dit werkt niet. Iemand een idee? Of in welke richting ik moet zoeken? Of klinkt mijn verhaal helemaal niet logisch?

EDIT:
Hm, als ik mn datum veld wijzig naar een waarde als bv 2014-08-04 15:00:00 dan kan ik wel van een afgeleide van bovenstaande query gebruik maken. Dan werkt bv wel:

$query 	= mysql_query("SELECT * FROM `wedstrijden` WHERE datum > DATE_SUB(now(), interval 100 minute)");


Als iemand een oplossing heeft voor mn eerste variant zou mooi zijn, anders zal ik alle gegevens opnieuw moeten invoeren..
Bart B op 04/08/2014 16:58:33

datum, tijd, thuis, uit, uitslag
d-m-Y, 00:00, teamnaam, teamnaam, 0-0

bv, 09-08-2014, 12:30, teamnaam, teamnaam, 3-3


Je start is al fout.
Gebruik voor een datum altijd een DATE type en voor datum/tijd DATETIME.
Als je met datums wilt rekenen in SQL zal het datatype van de kolom altijd date of datetime moeten zijn.
Het is niet zoveel werk als je denkt:
Voeg een kolom toe aan de tabel van datetime datatype en noem hem datum_tijd.
Dan deze query:
UPDATE wedstrijden
SET
	datum_tijd = STR_TO_DATE(datum, '%d-%m-%Y') + INTERVAL tijd HOUR_SECOND
Okee, dat is duidelijk :) Ik heb column omgezet naar een DATETIME veld en alle datums en tijden aangepast, maar als ik nu bv deze query gebruik:


$query 	= mysql_query("SELECT * FROM `wedstrijden` WHERE datum > DATE_SUB(now(), interval 100 minute)");


Dan krijg ik gewoon alle wedstrijden te zien. Ook bv die aankomende zaterdag worden gespeeld. En niet alleen waarvan de aanvangstijd minder dan 100 minuten geleden is.

Ik heb bv voor vandaag 2 wedstrijden staan, waarin het DATETIME field dan 2014-08-04 18:00:00 en 2014-08-04 20:30:00 staan. Dan zou ik alleen de wedstrijd van 2014-08-04 18:00:00 moeten zien, omdat deze minder dan 100 minuten geleden gestart is. Die van 2014-08-04 20:30:00 zou ik niet moeten zien omdat deze nog niet begonnen is. Nog een idee hoe ik dat zou moeten doen, of in welke richting ik de query zou moeten formuleren?
Als je hetgeen je wilt weten al anders formuleert, kom je ook al een eind.
Wat je wilt hebben is de wedstrijden waarvan de aanvangstijd tussen nu en nu-100 minuten ligt, in de query krijg je dan

SELECT * FROM wedstrijden
WHERE
datum BETWEEN NOW() AND NOW() - INTERVAL 100 MINUTE
Zoiets?
Niet getest.

WHERE NOW() >= DATE_SUB(datum, INTERVAL 100 MINUTE)
Dan keer je het om, je krijgt dan ook de wedstrijden van gisteren.
Ai. De BETWEEN was ik inderdaad mee aan het puzzelen. Maar deze geeft geen rows terug met hoe je het formuleerde, ondanks dat er wedstrijden instaan die nu bezig zijn. Bv 1 om 18:00. Ik vat het niet helemaal meer.

Mis ik iets?

Ik zit ondertussen ook even wat anders te testen, maar onderstaande geeft 0 rows

$query 	= mysql_query("SELECT * FROM `wedstrijden` WHERE DATE(datum) = '2014-08-04%'");


en dit onderstaande geeft ze wel van vandaag terug.

$vandaag = date("Y-m-d");
$query 	= mysql_query("SELECT * FROM `wedstrijden` WHERE DATE(datum) = '$vandaag%'");


Kan iemand me dit uitleggen hoe dat komt?
Ger van Steenderen op 04/08/2014 18:35:28


SELECT * FROM wedstrijden
WHERE
datum BETWEEN NOW() AND NOW() - INTERVAL 100 MINUTE


Dit gaat niet werken. Bij between moet je de laagste waarde als eerste noemen, dus:

WHERE datum BETWEEN NOW() - INTERVAL 100 MINUTE and NOW()
>> Dit gaat niet werken. Bij between moet je de laagste waarde als eerste noemen.

Pardon?

Dus 7 ligt wel tussen 5 en 10 maar niet tussen 10 en 5?

[size=xsmall]Toevoeging op 04/08/2014 19:33:47:[/size]

Inderdaad ....
Willem vp op 04/08/2014 19:23:26

[quote="Ger van Steenderen op 04/08/2014 18:35:28"]

SELECT * FROM wedstrijden
WHERE
datum BETWEEN NOW() AND NOW() - INTERVAL 100 MINUTE


Dit gaat niet werken. Bij between moet je de laagste waarde als eerste noemen, dus:

WHERE datum BETWEEN NOW() - INTERVAL 100 MINUTE and NOW()

[/quote]

Ah super, dank je wel. Zo werkt het zoals het zou moeten werken. Nogmaals dank allemaal!

Reageren