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..
Ger van Steenderen op 04/08/2014 19:31:11

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

Klopt. Als je in de source van MySQL kijkt (sql/item_cmpfunc.cc) dan zul je zien dat BETWEEN is geïmplementeerd als:

    if (!args[1]->null_value && !args[2]->null_value)
      return (longlong) ((value >= a && value <= b) != negated);

(enigszins afhankelijk van het datatype, maar het komt allemaal op hetzelfde neer)
Dat jouw opmerking klopte was ik inmiddels al achter.
Ik vind het alleen niet logisch om het zo te programmeren.
Ger van Steenderen op 04/08/2014 20:50:07

Ik vind het alleen niet logisch om het zo te programmeren.

Eerlijk gezegd: ik wel. ;-)

Wiskundig gezien is er weliswaar geen verschil, maar in het normale spraakgebruik zul je meestal ook eerst de lage waarde noemen (het wordt morgen tussen de 27 en 30 graden; er valt tussen de 2 en 4 mm regen; ik zoek een secretaresse tussen de 20 en 30 jaar; mijn nieuwe auto mag tussen de 7000 en 10000 euro kosten).

Daarnaast is het ook qua performance beter, want het scheelt toch een aantal vergelijkingen en bij een query op een dataset van een paar miljoen records zul je dat best merken.

Reageren