MySQL - zufall ? bzw. wie nutzt man random bei select ?
Korbinian Bachl
- datenbank
Hi,
habe ein kleines Problem an dem ich seit 2 Tagen rumrätsel...
ich möchte aus einer tabelle mit 1000 Zeilen 10 ausgeben lassen, welche aber durch zufall ausgesucht werden sollen... sprich ich habe
Zeile 1
Zeile 2
zeile 3
Zeile 4
....
Zeile 1000
soll er mit dann Zeile 6, Zeile 656, zeile 777... Zeile x[10] zurückliefern... ich habe es schon mit select * from table where row = x limit by rand, 10; probiert aber dann bringt er sie ja sortiert zurück bzw. so wie sie in der tabelle stehen...
was kann man da tun ? per PHP / Perl erst 10 zufallszahlen zu suchen udn dann die rows hernehmen und überprüfen ob die bedingung erfüllt wird und wenn nicht nochmal erscheint mir zu aufwendig...
mfg
Korbinian Bachl
www.whiskyworld.de
OK, lösung heisst:
select * from X where Z = V order by RAND() limit 0,10; sagt zumindest das SelfHTML CHAT - gebe aber keine gewähr...
mfg
korbinian bachl
Hallo!
ich möchte aus einer tabelle mit 1000 Zeilen 10 ausgeben lassen, welche aber durch zufall ausgesucht werden sollen... sprich ich habe
soll er mit dann Zeile 6, Zeile 656, zeile 777... Zeile x[10] zurückliefern... ich habe es schon mit select * from table where row = x limit by rand, 10; probiert aber dann bringt er sie ja sortiert zurück bzw. so wie sie in der tabelle stehen...
Eben habe ich mal folgendes angetestet:
SELECT id FROM tabname ORDER BY RAND() LIMIT 10;
Es werde immer 10 id's in einer nicht sortieren Reihenfolge ausgegeben! Selbst mit DESC und ASC weigert sich mySQL, die id's zu sortieren.
MfG, André Laugks
Hi auch,
was kann man da tun ? per PHP / Perl erst 10 zufallszahlen zu suchen
und dann die rows hernehmen und überprüfen ob die bedingung erfüllt
wird und wenn nicht nochmal erscheint mir zu aufwendig...
nicht, wenn Du es richtig anfängst.
Als erstes brauchst Du eine Tabellenspalte, welche zuverlässig eine
lückenlos aufsteigende positive ganze Zahl enthält.
Wenn Deine Datenbank das automatisch kann, prima - ansonsten selbst eine
anlegen, bei INSERTs entsprechenden Wert einfügen und - das ist jetzt
wichtig - einen UNIQUE INDEX über diese Spalte legen.
Dann zu Beginn Deiner Aktion ein SELECT COUNT(*) FROM <tabelle> feuern.
Dadurch bekommst Du die Information, welche Zeilen vorhanden sind.
Jetzt kann es mit dem Würfeln losgehen!
Du kannst nun über Deine Nummern-Spalte gezielt einzelnen Zeilen auswählen.
Durch den UNIQUE INDEX ist sowohl die Eindeutigkeit als auch die Performan-
ce des Zugriffs sichergestellt.
Viele Grüße
Michael