Heim > Artikel > Backend-Entwicklung > Wie gewichtet man zufällige Auswahlen in MySQL?
Gewichtung zufälliger Auswahlen in MySQL
Bei der Arbeit mit großen Datensätzen kann es notwendig sein, einen Eintrag zufällig auszuwählen und dabei die damit verbundene Gewichtung zu berücksichtigen mit jedem Eintrag. In MySQL kann dies durch die Verwendung einer Kombination aus Funktionen und Gewichtungsmultiplikatoren erreicht werden.
Um einen einzelnen Eintrag aus einer Tabelle auszuwählen, verwenden Sie die SELECT-Anweisung. Um die Auswahl zu randomisieren, verwenden Sie die Funktion RAND(). Um jedoch eine Gewichtung einzuführen, ist ein zusätzlicher Schritt erforderlich.
Stellen Sie sich eine Tabelle mit Einträgen und einer Spalte „Multiplikator“ vor, die deren Gewichtungen darstellt. Um die Auswahl auf Einträge mit höheren Multiplikatoren zu gewichten, ändern Sie die Anweisung mit der folgenden Syntax:
SELECT * FROM table_name ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
In diesem Ausdruck sortiert die ORDER BY-Klausel die Ergebnisse in aufsteigender Reihenfolge des berechneten Werts. Der Wert wird ermittelt, indem der negative Logarithmus einer Zufallszahl zwischen 0 und 1 durch den Multiplikator dividiert wird. Einträge mit höheren Multiplikatoren haben kleinere berechnete Werte und erscheinen früher in der sortierten Liste. Die LIMIT 1-Klausel wählt dann den obersten Eintrag als gewichtete Zufallsauswahl aus.
Beachten Sie, dass diese Methode nicht von Multiplikatorwerten von 0 beeinflusst wird, da ein Multiplikator von Null immer noch dazu führt, dass der Eintrag am Ende erscheint sortierte Liste. Auf Wunsch können Einträge mit einem Multiplikator von 0 über eine WHERE-Klausel von der Auswahl ausgeschlossen werden:
SELECT * FROM table_name WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
Das obige ist der detaillierte Inhalt vonWie gewichtet man zufällige Auswahlen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!