Hoi

Datums worden opgeslagen als DATETIME in mijn database. Nu is het de bedoeling dat ik 3 willekeurige items uit de db haal, waar de datum in de afgelopen 200 dagen ligt.

Ik doe dit als volgt:
WHERE UNIX_TIMESTAMP(datum) > UNIX_TIMESTAMP(NOW() - 200*86400) ORDER BY RAND() LIMIT 3

Maar dit doet het niet zoals ik had gehoopt, iemand tips om dit beter te doen?
een timestamp is heel iets anders dan een datetime.

een timestamp is een groot getal (in seconden) vanaf 1-1-1970.
een datetime is van het formaat JJJJ-MM-DD HH:MM:SS

je zult met de functie NOW en DATE_ADD en/of DATE_SUB moeten werken, zoek maar eens op mysql.org
Tip: Vergeet dat een Unix-timestamp bestaat, daar heb je zo zelden iets aan dat het weinig zin heeft om hier mee te gaan klussen. Het levert veel meer problemen op dan oplossingen.
Volgens mij heb je een subquery nodig:


SELECT datum
FROM tabelnaam AS t1
WHERE datum = (

SELECT datum
FROM tabelnaam AS t2
WHERE DATEDIFF( curdate( ) , datum)
BETWEEN 0
AND 200

)
ORDER BY RAND( )
LIMIT 3 
@Jan, waarom een subquery? Wanneer ik datediff direct in de WHERE plaats, werkt het ook -op het eerste zicht-.

Zie ik hier nog wat over het hoofd?
Dat moet je even uittesten. Krijg je elke keer drie andere datums? Dan kan het ook zonder en dacht ik iets te ingewikkeld ;-)
Ik krijg inderdaad elke keer andere resultaten terug, maar die toch binnen 200 dagen vallen. Bedankt :-)

Reageren