<?php
SELECT count( * ) AS mozilla
FROM `statistiek`
WHERE browser LIKE '%Gecko%'
AND (
datum > '2006-11-20'
)
AND (
datum < '2006-11-20'
)
?>
Heb volgende SQL query gemaakt om uit een stats tabel een periode te selecteren. Dus via een form kan een gebruiker aangeven dat hij stats wil zien Van datum X tot Y. Opzicht werkt deze query zolang ik maar niet beide dagen het zelfde maak zoals boven in de query te zien is. Dan geeft hij 0 als resultaat. Nou dacht ik dit zelf natuurlijk gewoon op te lossen met de operator: <= en >=. Maar nou merk ik tot mijn verbazing dat ik dan weer 0 als resultaat krijg. Wat doe ik fout? Is die AND soms niet goed?
Dit kan simpelweg niet. En vroeger dan ... en later dan ...
Edit: Dit kan dus niet bij dezelfde datum
Dit kan wel dus:
(datum > '2006-11-01') AND (datum < '2006-11-31')
Maar goed nu weet ik dus wat niet kan :) Maar stel ik wil in die query ook opnemen dat ik dezelfde datums heb. Hoe los ik dit dan op?
Ik heb dus een formulier waarin je 2x een datum selecteerd. 1x de VAN-datum en 1x de TOT-datum. Als je dus beide datums het zelfde neemt doet zich het probleem voor. Waarom werkt de <= en de >= dan niet in dit geval? De ene datum is dan toch groter of gelijk aan en de andere kleiner of gelijk aan. Dat is toch 2x TRUE?? OF niet :)?
BETWEEN kan ook maar ik vind persoonlijk < en > makkelijker werken. wat je ook kan doen is eerst eens even controleren of beide datums niet gelijk zijn.
<?php
if($datum == $datum1){
$query = "SELECT count( * ) AS mozilla
FROM `statistiek`
WHERE browser LIKE '%Gecko%'
AND
datum > ".$datum."";
}else{
$query = "SELECT count( * ) AS mozilla
FROM `statistiek`
WHERE browser LIKE '%Gecko%'
AND (
datum > '".$datum."'
)
AND (
datum < '".$datum1."'";
)
}
?>
@Jurgen: Waar zijn die gore backtics ` goed voor? Ritueel verbranden die zooi en vergeten dat je ze ooit hebt gebruikt.
Tevens raad ik je aan om slechts 1 query te gebruiken waarbij het AND-gedeelte variabel is, dat is een stuk beter te onderhouden:
<?php
if($datum == $datum1){
$qAnd = "datum > '".$datum."'";
}
else {
$qAnd = "
(
datum > '".$datum."'
)
AND (
datum < '".$datum1."'
)";
}
$query = "
SELECT
count(*) AS mozilla
FROM
statistiek
WHERE
browser LIKE '%Gecko%'
AND ".$qAnd;
?>
@San:
Ik heb de datum opgeslagen in de database met de funtie NOW() in the query. Vervolgens maak ik een string van de variabelen verkregen van het form .
Op deze manier doe ik dat:
<?php
$datum = date("Y-m-d", mktime(0,0,0,$maand,$dag,$jaar));
$datum2 = date("Y-m-d", mktime(0,0,0,$maand2,$dag2,$jaar2));
$selectie = mktime(0,0,0,$maand2,$dag2,$jaar2) - mktime(0,0,0,$maand,$dag,$jaar);
?>
@Jurgen:
Ja aan die oplossing was ik ook aan het denken maar had toch echt gedacht dat het ook met 1 query zou moeten kunnen. Verder vraag ik me nu eigenlijk af dat als ik nu als datum 20-11-2006 pak en de ander 21-11-2006, wat hij dan nu doet. Ik krijg als ik die query invoer igg een resultaat. Maar dat resultaat is wel het zelfde met zowel de < en > als de <= en >= operator.
@Frank:
Damn, ben je me weer te snel af :). Ja die oplossing bevalt me wel zo hoef ik niet mijn helecode te gaan wijzigen. Ik denk dat dit de beste oplossing is in dit geval.