Zufalls Eintrag aus der Datenbank

Hab hier noch eine interessante Variante, die auf der ersten Blick nach mehr Arbeit aussieht, aber für MySQL schneller is.

Zuerst erstellst du eine neue Spalte mit dem Namen "random" in der Tabelle.
Code:
ALTER TABLE table ADD random DOUBLE
Danach dieses Feld indizieren
Code:
ALTER TABLE table ADD INDEX (random)
Jetzt jedem Feld in der Datenbank einen Wert zuweisen
Code:
UPDATE table SET random = RAND()

Die Auswahl zufälliger Datensätze erfolgt nun über:
Code:
SELECT * FROM table WHERE random > RAND() ORDER BY random LIMIT 1

Achtung
  • Tabellenoperationen sind dadurch langsamer wegen dem Index
  • Es kann nur ein Datensatz zufällig ausgewählt werden.
  • Beim einfügen neuer Datensätze darf der Zufallswert nicht vergessen werden.
 
Original geschrieben von workaholic
Hab hier noch eine interessante Variante, die auf der ersten Blick nach mehr Arbeit aussieht, aber für MySQL schneller is.

Zuerst erstellst du eine neue Spalte mit dem Namen "random" in der Tabelle.
Code:
ALTER TABLE table ADD random DOUBLE

Danach dieses Feld indizieren
Code:
ALTER TABLE table ADD INDEX (random)

Jetzt jedem Feld in der Datenbank einen Wert zuweisen
Code:
UPDATE table SET random = RAND()


Die Auswahl zufälliger Datensätze erfolgt nun über:
Code:
SELECT * FROM table WHERE random > RAND() ORDER BY random LIMIT 1


Achtung
  • Tabellenoperationen sind dadurch langsamer wegen dem Index
  • Es kann nur ein Datensatz zufällig ausgewählt werden.
  • Beim einfügen neuer Datensätze darf der Zufallswert nicht vergessen werden.

Das ist mir zu umständlcih und da ich nicht sowas große damit vor habe wir die abfrage nicht viel schnneller...

mfg
Henrik
 
Original geschrieben von snuu
@leuchte: Natürlich hast Du Recht, aber er hat die Datenbank nicht spezifiziert. Sehr wahrscheinlich ist es MySQL .. doch wenn es nun doch Progress ist?

snuu:

Rand ist Ansi SQL 92, und wird somit von den meisten mehr oder minder aktuellen SQL-Sytemen unterstützt. Darunter auch Postgres und MySQL ... nur mal so als Info :)
 
@Sir Robin: Ich gebe es ja zu -> ich wollte mich nur wegen meinem ungünstigen Lösungsvorschlag heraus reden.

Nur zur Richtigstellung: Es gibt auch ein "Progress"-DBS

Gruß, snuu
 
Zurück