hi,
Zufällig ausgeben mache ich mit SELECT * from wn_zitate ORDER BY RAND() LIMIT 0,1. Allerdings wird dann jedes Mal beim Aufrufen ein anderes Zitat angezeit. Ich möchte aber, dass die Anzeige nur täglich wechslet.
da computer dumme rechenmaschinen sind, können sie keine "echten" zufallszahlen erzeugen.
sie gehen immer von einem bestimmten startwert - man nennt den "seed" - aus, rechnen damit ein wenig rum, und präsentieren dir am ende irgendeine pseudo-zufällige zahl.
wenn dieser startwert der gleiche ist, kommt also auch immer die gleiche "zufallszahl" heraus. um dies zu verhindern, und doch scheinbar zufällige zahlen zu haben, wird beispielsweise der stand der rechnerinternen uhr zum zeitpunkt des funktionsaufrufes der random-funktion als seed genommen - wenn man den fein genug unterteilt, beispielsweise in microsekunden, kommen da halbwegs brauchbare zufallszahlen raus.
aber noch mal zurück zu der tatsache, dass ein gleicher seed auch immer die gleiche zufallszahl erzeugt - das kannst du dir hier zu nutze machen. auch RAND() in mysql bietet die möglichkeit, einen seed anzugeben - dieser muss lediglich ganzzahlig sein.
was liegt also näher, als RAND() immer einen tag lang mit dem gleichen seed zu füttern, um jeden tag das gleiche ergebnis ausgewählt zu bekommen?
wohlgemerkt, wir brauchen eine ganzzahl als seed - woher kriegen wir die?
recht einfach zum beispiel, in dem wir das aktuelle datum - NOW() - in die anzahl tage umrechnen lassen, die seit dem jahr 0 vergangen sind - TO_DAYS().
ein einfaches
ORDER BY RAND(TO_DAYS(NOW())) LIMIT 1
liefert dir also jeden tag ein neuen, zufällig ausgewählten datensatz zurück - jeweils einen tag lang den selben.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }