Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich eine zufällige Zeile für den aktuellen Tag?

Verwenden Sie einen Startwert für den Zufallszahlengenerator basierend auf dem aktuellen Datum:

ORDER BY RAND(20120714) LIMIT 1

Ich bin auch neugierig, was Sie hier mit "andere" gemeint haben:

Wenn Sie eine andere auswählen möchten jeden Tag ein zufälliges Zitat, dann sollten Sie kein einfaches ORDER BY RAND(seed) verwenden . Dies könnte drei Tage hintereinander dasselbe Angebot zurückgeben.

Wenn Sie dies vermeiden möchten, können Sie stattdessen speichern, welches Angebot für jeden Tag ausgewählt wird, und ein zufälliges Angebot aus denen auswählen, die in den letzten n Tagen nicht verwendet wurden. Wenn Sie speichern, wann ein Zitat zuletzt verwendet wurde, gibt es natürlich auch eine natürliche Lösung für Ihr ursprüngliches Problem:

  • Suchen Sie nach einem Zitat, das heute zuletzt verwendet wurde.
  • Wenn es einen gibt, ist das das Zitat des Tages.
  • Falls nicht, wählen Sie einen neuen Kurs des Tages aus Zeilen aus, die in den letzten n Tagen nicht verwendet wurden, und aktualisieren Sie die Zeile, um anzuzeigen, dass es sich um den Kurs des Tages für heute handelt.

OK, wie wäre es mit einem etwas anderen Ansatz:

ORDER BY RAND(201207) LIMIT 14, 1
--            yyyymm        dd

Jetzt brauchen Sie keine zusätzliche Spalte und Sie erhalten keine Wiederholungen, außer vielleicht beim Monatswechsel. Diese Lösung geht davon aus, dass Sie mindestens 32 Zitate zur Auswahl haben.