Heim  >  Artikel  >  Datenbank  >  Wie wähle ich Daten in MySQL-Abfragen zufällig aus und sortiere sie dann?

Wie wähle ich Daten in MySQL-Abfragen zufällig aus und sortiere sie dann?

DDD
DDDOriginal
2024-10-26 05:12:31694Durchsuche

How to Randomly Select and then Sort Data in MySQL Queries?

Kombinieren von zufälliger und aufsteigender Reihenfolge in MySQL-Abfragen

In einem Datenbankszenario, in dem Sie eine beträchtliche Anzahl von Benutzern haben, kann es zu einer Situation kommen Dabei möchten Sie eine Teilmenge davon zufällig auswählen und sie weiter nach einem bestimmten Attribut, z. B. dem Namen, sortieren. Obwohl dies wie eine unkomplizierte Aufgabe erscheint, liefern Standard-SQL-Abfragen möglicherweise nicht immer das gewünschte Ergebnis.

Ein Ansatz, den Sie in Betracht ziehen könnten, ist die Verwendung von ORDER BY rand(), das häufig zum Abrufen zufälliger Ergebnisse verwendet wird eine Datenbank. In Kombination mit einer anderen ORDER BY-Klausel, z. B. name ASC, funktioniert es jedoch möglicherweise nicht wie erwartet. Die folgende Abfrage liefert beispielsweise möglicherweise nicht das gewünschte Ergebnis:

<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>

Diese Abfrage versucht, 20 Benutzer zufällig auszuwählen und sie dann in aufsteigender Reihenfolge nach ihrem Namensattribut zu ordnen. Es ist jedoch wichtig zu verstehen, dass Datenbankmanagementsysteme (DBMS) Abfragen von links nach rechts verarbeiten. Daher wird in diesem Fall zuerst die Funktion rand() angewendet, wodurch der gesamte Datensatz effektiv gemischt wird. Anschließend wird die Namens-ASC-Klausel angewendet, aber da die Daten bereits randomisiert wurden, hat sie keinen sinnvollen Einfluss auf die Reihenfolge der Ergebnisse.

Eine Unterabfragelösung

Um das gewünschte Verhalten zu erreichen, können Sie eine Unterabfrage innerhalb der Hauptabfrage verwenden. Eine Unterabfrage ist eine verschachtelte Abfrage, mit der eine Teilmenge der Daten isoliert und eine bestimmte Logik darauf angewendet werden kann. Durch die Nutzung einer Unterabfrage können Sie zunächst 20 Benutzer zufällig auswählen und sie dann innerhalb der Unterabfrage nach ihrem Namensattribut sortieren.

Hier ist ein Beispiel einer überarbeiteten Abfrage, die eine Unterabfrage verwendet:

<code class="sql">SELECT * FROM 
(
    SELECT * FROM users ORDER BY rand() LIMIT 20
) T1
ORDER BY name</code>

In dieser Abfrage wählt die Unterabfrage (SELECT * FROM users ORDER BY rand() LIMIT 20) 20 Benutzer in zufälliger Reihenfolge aus der Benutzertabelle aus und speichert sie in einer temporären Tabelle T1. Die äußere Abfrage wählt dann alle Spalten aus T1 aus und ordnet die Ergebnisse nach dem Namensattribut.

Durch die Verwendung einer Unterabfrage stellen Sie sicher, dass die Funktion rand() nur auf die Teilmenge der Benutzer angewendet wird, die Sie zufällig auswählen möchten wählen. Dieser Ansatz garantiert, dass die anschließende Namensreihenfolge auf die bereits randomisierten Daten angewendet wird und das gewünschte Ergebnis von 20 zufällig ausgewählten Benutzern, alphabetisch nach ihren Namen geordnet, entsteht.

Das obige ist der detaillierte Inhalt vonWie wähle ich Daten in MySQL-Abfragen zufällig aus und sortiere sie dann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn