Filteren op datum
Hallo allemaal,
Ik wil een agenda plaatsen, en met de berichten voor de komende week.
In de tabel staat de datum er zo in 23-11-2006
$sql = mysql_query("SELECT * FROM agenda WHERE program_id='$program_id' ");
Nu komen alle berichten erin, hoe kan ik dit zo maken dat alleen berichten voor de komende week erin staan?
Groetjes,
Tim
Ik wil een agenda plaatsen, en met de berichten voor de komende week.
In de tabel staat de datum er zo in 23-11-2006
$sql = mysql_query("SELECT * FROM agenda WHERE program_id='$program_id' ");
Nu komen alle berichten erin, hoe kan ik dit zo maken dat alleen berichten voor de komende week erin staan?
Groetjes,
Tim
Quote:
Fout, 23-11-2006 is geen datum maar een string. Een datum sla je op in een DATE en deze eist het formaat yyyy-mm-dd, 2006-11-23 in dit geval.In de tabel staat de datum er zo in 23-11-2006
Oplossing: Aanpassen dus.
De functie WEEK() doet wonderen met vergelijkingen, zie hoofdstuk 12.5 van de MySQL-handleiding.
Ik heb nu dit
FROM agendaWHERE program_id='$program_id' and MONTH(datum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)");
en de datum is nu aangepast in date met yyyy-mm-dd
FROM agendaWHERE program_id='$program_id' and MONTH(datum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)");
en de datum is nu aangepast in date met yyyy-mm-dd
Geen errors maar ook geen records, wat is hier nu fout aan?
MONTH(datum) levert een getal op 1 t/m 12. Hoe wil je dit nu tussen NOW() en NOW() + 7 dagen gaan zetten? De functie MONTH() lijkt mij niet op zijn plaats, gewoon de kolom datum noemen lijkt mij voldoende.
En wel je query netjes noteren, dat maakt de boel leesbaar:
I.p.v. * kun je beter de kolomnamen benoemen die je nodig hebt. Dat is vele malen duidelijker en voorkomt dus weer bugs. Net zoals dat je een query eerst in een variabele zet en controleert of de query wel is gelukt.
$sql was trouwens een naam die nergens op sloeg, er stond namelijk helemaal geen SQL in. Daar heb ik maar $result van gemaakt, het gaat om een result.
En wel je query netjes noteren, dat maakt de boel leesbaar:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$query = "
SELECT
*
FROM
agenda
WHERE
program_id = '".$program_id."'
AND
datum BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
";
$result = mysql_query($query);
if($result){ // query gelukt
// doe iets met het resultaat
$count = mysql_num_rows($result);
echo 'Er zijn '.$count.' records geselecteerd.';
// rest van je script
}
else { // query mislukt
echo 'Mislukt vanwege de volgende fout: '.mysql_error().$query;
}
?>
$query = "
SELECT
*
FROM
agenda
WHERE
program_id = '".$program_id."'
AND
datum BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
";
$result = mysql_query($query);
if($result){ // query gelukt
// doe iets met het resultaat
$count = mysql_num_rows($result);
echo 'Er zijn '.$count.' records geselecteerd.';
// rest van je script
}
else { // query mislukt
echo 'Mislukt vanwege de volgende fout: '.mysql_error().$query;
}
?>
I.p.v. * kun je beter de kolomnamen benoemen die je nodig hebt. Dat is vele malen duidelijker en voorkomt dus weer bugs. Net zoals dat je een query eerst in een variabele zet en controleert of de query wel is gelukt.
$sql was trouwens een naam die nergens op sloeg, er stond namelijk helemaal geen SQL in. Daar heb ik maar $result van gemaakt, het gaat om een result.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Super! ik heb het allemaal aangepast.
Groetjes,
Tim
Groetjes,
Tim




