15 Stimmen

Wie wählt man eine Zeile nach dem Zufallsprinzip unter Berücksichtigung einer Gewichtung aus?

Ich habe eine Tabelle, die so aussieht:

id: primary key
content: varchar
weight: int

Ich möchte eine Zeile aus dieser Tabelle nach dem Zufallsprinzip auswählen, jedoch unter Berücksichtigung des Gewichts. Zum Beispiel, wenn ich 3 Zeilen habe:

id, content, weight
1, "some content", 60
2, "other content", 40
3, "something", 100

Die erste Reihe hat eine Wahrscheinlichkeit von 30 %, die zweite Reihe eine Wahrscheinlichkeit von 20 % und die dritte Reihe eine Wahrscheinlichkeit von 50 %, ausgewählt zu werden.

Gibt es eine Möglichkeit, dies zu tun? Wenn ich 2 oder 3 Abfragen ausführen muss, ist das kein Problem.

-1voto

Pavlo Svirin Punkte 500

Vielleicht diese:

SELECT * FROM <Table> T JOIN (SELECT FLOOR(MAX(ID)*RAND()) AS ID FROM <Table> ) AS x ON T.ID >= x.ID LIMIT 1;

Oder dieses:

SELECT * FROM tablename
          WHERE somefield='something'
          ORDER BY RAND() LIMIT 1

-4voto

Dewfy Punkte 22558

Ich erinnere mich nicht, wie man RND() in mysql, aber hier Arbeitsbeispiel für MSSQL:

SELECT TOP(1) (weight +RAND ()) r, id, content, weight FROM Table
ORDER BY 1 DESC

Wenn TOP(1) nicht anwendbar ist, holen Sie einfach den ersten Datensatz aus der gesamten Ergebnismenge.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X