Zusammenfassung: In diesem Tutorial lernen Sie verschiedene Techniken kennen, um zufällige Datensätze aus einer Datenbanktabelle in MySQL auszuwählen.

Manchmal müssen Sie zufällige Datensätze aus einer Tabelle auswählen, zum Beispiel:

  • Wählen Sie einige zufällige Beiträge in einem Blog aus und zeigen Sie sie in der Seitenleiste an.
  • Wählen Sie ein zufälliges Zitat aus, um das „Zitat des Tages“-Widget anzuzeigen.
  • Wählen Sie zufällige Bilder in einer Galerie aus und verwenden Sie diese als „featured pictures“.

MySQL wählt zufällige Datensätze mit ORDER BY RAND() aus

MySQL hat keine eingebaute Anweisung, um zufällige Zeilen aus einer Tabelle auszuwählen. Um dies zu erreichen, verwenden Sie die Funktion RAND().

Die folgende Abfrage wählt eine zufällige Zeile aus einer Datenbanktabelle aus:

Code language: SQL (Structured Query Language) (sql)

Lassen Sie uns die Abfrage genauer untersuchen.

  • Die Funktion RAND() generiert einen Zufallswert für jede Zeile in der Tabelle.
  • Die ORDER BYKlausel sortiert alle Zeilen in der Tabelle nach der von der Funktion RAND() erzeugten Zufallszahl.
  • Die LIMITKlausel wählt die erste Zeile in der zufällig sortierten Ergebnismenge aus.

Wenn Sie N zufällige Datensätze aus einer Datenbanktabelle auswählen möchten, müssen Sie die LIMITKlausel wie folgt ändern:

Code language: SQL (Structured Query Language) (sql)

Siehe die folgende customersTabelle aus der Beispieldatenbank.

Das folgende Beispiel wählt fünf zufällige Kunden aus der Tabelle customers aus:

Code language: SQL (Structured Query Language) (sql)

Versuchen Sie es

Beachten Sie, dass Sie möglicherweise eine andere Ergebnismenge erhalten, da sie zufällig ist.

Diese Technik funktioniert sehr gut mit einer kleinen Tabelle. Bei einer großen Tabelle wird sie jedoch langsam, weil MySQL die gesamte Tabelle sortieren muss, um die zufälligen Zeilen auszuwählen.

Die Geschwindigkeit der Abfrage hängt auch von der Anzahl der Zeilen in der Tabelle ab. Je mehr Zeilen die Tabelle hat, desto mehr Zeit wird benötigt, um die Zufallszahl für jede Zeile zu generieren.

MySQL wählt Zufallsdatensätze mit Hilfe der INNER JOIN-Klausel aus

Diese Technik erfordert, dass die Tabelle ein automatisch inkrementierendes Primärschlüsselfeld hat und keine Lücke in der Sequenz vorhanden ist.

Die folgende Abfrage generiert eine Zufallszahl auf der Grundlage der Primärschlüsselspalte:

Code language: SQL (Structured Query Language) (sql)

Wir können die Tabelle mit der von der obigen Abfrage zurückgegebenen Ergebnismenge wie folgt verknüpfen:

Code language: SQL (Structured Query Language) (sql)

Bei dieser Technik müssen Sie die Abfrage mehrmals ausführen, um mehr als eine zufällige Zeile zu erhalten, denn wenn Sie das Limit erhöhen, gibt die Abfrage nur sequentielle Zeilen aus, die mit der zufällig ausgewählten Zeile beginnen.

Die folgende Abfrage gibt einen zufälligen Kunden aus der Tabelle customers zurück.

Code language: SQL (Structured Query Language) (sql)

Versuchen Sie es

MySQL select random records using variables

Für den Fall, dass die Tabelle die Spalte id mit den Werten hat, die in einen Bereich 1..N fallen und es keine Lücke im Bereich gibt, können Sie die folgende Technik verwenden:

  • Erst wählen Sie Zufallszahlen im Bereich 1..N.
  • Zweitens, wählen Sie die Datensätze auf der Grundlage der Zufallszahlen aus.

Die folgende Anweisung hilft Ihnen dabei:

Code language: SQL (Structured Query Language) (sql)

Beachten Sie, dass die benutzerdefinierten Variablen verbindungsspezifisch sind. Das bedeutet, dass diese Technik nicht mit dem Verbindungspooling verwendet werden kann. Außerdem muss der Primärschlüssel vom Typ Ganzzahl sein und seine Werte müssen in einer lückenlosen Reihenfolge stehen.

In diesem Tutorial haben wir Ihnen verschiedene Techniken gezeigt, um zufällige Datensätze aus einer Tabelle auszuwählen.

  • War dieses Tutorial hilfreich?
  • JaNein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.