SELECT *, w.naam as winkelnaam from folders f, winkels w WHERE f.einddatum > now() - INTERVAL 30 day AND w.id = f.winkelid group by f.id order by f.einddatum DESC;
Ik krijg gewoon waarden uit 2025, terwijl einddatum een datum veld is.
Dat klopt toch gewoon? Je vraagt om een einddatum die groter is dan 30 dagen geleden: alle datums in de toekomst vallen daaronder, waaronder alle datums uit 2025.
overweeg eens af en toe op enter te drukken.
Behalve een paar bytes kost dat eigenlijk niets.
En dan ziet je query er zo uit en dat lijkt me een stuk leesbaarder:
SELECT *, w.naam as winkelnaam
FROM folders f, winkels w
WHERE f.einddatum > now() - INTERVAL 30 day
AND w.id = f.winkelid
-- group by f.id
ORDER BY f.einddatum DESC;
En dan heb ik meteen die group by regel uitgecommenteerd: die hoort daar niet.
En in de vergevingsgezinde modus zal Mysql er iets van proberen te maken.
Vaak zie je dat dat erin gezet wordt op dubbelen te filteren. Maar dan zou je je liever af moeten vragen wat er niet klopt aan de query ipv "doe maar group by erbij"
[size=xsmall]Toevoeging op 17/08/2024 21:34:13:[/size]
Een wat algemenere syntax zou zijn om een JOIN te gebruiken. (waar jij een join op mysql-wijze gebruikt)
SELECT *, w.naam as winkelnaam
FROM folders f, winkels w
JOIN winkels w ON w.id = f.winkelid
WHERE f.einddatum > NOW() - INTERVAL 30 DAY
-- group by f.id
ORDER BY f.einddatum DESC;
En dat geeft mij het idee dat er mogelijk folders zijn die bij meerdere winkels horen?
In dat geval zal group by f.id maar 1x de folder noemen en een willekeurige winkel. Maar welke winkel laat je over aan je database om er 1 te kiezen.
En misschien is dat morgen een andere dan vandaag.
SELECT *, w.naam as winkelnaam from folders f, winkels w
WHERE f.einddatum < now() + INTERVAL 30 day
AND w.id = f.winkelid group by f.id order by f.einddatum DESC;
WHERE f.einddatum BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
?Onbekende gebruiker
25-08-2024 11:26
gewijzigd op 25-08-2024 11:27
Toch gek dat de vragensteller over het correcte antwoord heen leest:
Ward van der Put op 17/08/2024 10:56:01
Dat klopt toch gewoon? Je vraagt om een einddatum die groter is dan 30 dagen geleden: alle datums in de toekomst vallen daaronder, waaronder alle datums uit 2025.
?Onbekende gebruiker
29-08-2024 09:35
gewijzigd op 30-08-2024 07:26
Ad Fundum op 25/08/2024 11:26:38
Toch gek dat de vragensteller over het correcte antwoord heen leest:
[quote="Ward van der Put op 17/08/2024 10:56:01"]
Dat klopt toch gewoon? Je vraagt om een einddatum die groter is dan 30 dagen geleden: alle hier datums in de toekomst vallen daaronder, waaronder alle datums uit 2025.
[/quote]
Dit is erg belangrijk om te overwegen als u om data vraagt. Veel mensen lijken te vergeten toekomstige datums in de berekening op te nemen.
?Onbekende gebruiker
03-09-2024 08:55
gewijzigd op 03-09-2024 08:58
Daniel van Seggelen op 17/08/2024 10:49:59
SELECT *, w.naam as winkelnaam from folders f, winkels w WHERE f.einddatum > now() - INTERVAL 30 day AND w.id = f.winkelid group by f.id order by f.einddatum DESC;
Ik krijg gewoon waarden uit 2025, terwijl einddatum een datum veld is.
War is hier fout?
Er staan toekomstige datums in de tabel, en die vang je niet af in de query.
Daniel van Seggelen op 18/08/2024 08:00:47
Ja, dan moet het zo zijn:
SELECT *, w.naam as winkelnaam from folders f, winkels w
WHERE f.einddatum < now() + INTERVAL 30 day
AND w.id = f.winkelid group by f.id order by f.einddatum DESC;
Wil dus de laatste 30 dagen zien
Dat lukt dus niet met deze query, want je filtert toekomstige datums in de tabel niet hiermee.
En de oplossing hiervoor is gegeven door Adoptive Solution en Jan Koehoorn.
Misschien wil je nog bevestigen of deze oplossing jou ook heeft geholpen?