Samenvatting: in deze tutorial leert u verschillende technieken om willekeurige records te selecteren uit een database tabel in MySQL.
Soms moet u willekeurige records selecteren uit een tabel, bijvoorbeeld:
- Enkele willekeurige berichten selecteren in een blog en deze weergeven in de zijbalk.
- Een willekeurig citaat selecteren voor het weergeven van “citaat van de dag” widget.
- Een willekeurige foto’s selecteren in een galerij en deze gebruiken als de uitgelichte foto’s.
MySQL selecteert willekeurige records met ORDER BY RAND()
MySQL heeft geen ingebouwd statement om willekeurige rijen uit een tabel te selecteren. Om dit te bereiken, gebruikt u de RAND()
functie.
De volgende query selecteert een willekeurige rij uit een database tabel:
Code language: SQL (Structured Query Language) (sql)
Laten we de query in meer detail bekijken.
- De functie
RAND()
genereert een willekeurige waarde voor elke rij in de tabel. - De
ORDER BY
-clausule sorteert alle rijen in de tabel op het willekeurige getal dat door deRAND()
-functie is gegenereerd. - De
LIMIT
-clausule kiest de eerste rij in de resultatenreeks die willekeurig is gesorteerd.
Als u N
willekeurige records uit een databasetabel wilt selecteren, moet u de LIMIT
-clausule als volgt wijzigen:
Code language: SQL (Structured Query Language) (sql)
Zie de volgende customers
tabel uit de voorbeelddatabase.
Het volgende voorbeeld selecteert vijf willekeurige klanten uit de customers
-tabel:
Code language: SQL (Structured Query Language) (sql)
Probeer het eens
Merk op dat u een andere resultatenset kunt krijgen omdat het willekeurig is.
Deze techniek werkt heel goed met een kleine tabel. Het zal echter traag zijn voor een grote tabel omdat MySQL de hele tabel moet sorteren om de willekeurige te selecteren.
De snelheid van de query hangt ook af van het aantal rijen in de tabel. Hoe meer rijen de tabel heeft, hoe meer tijd het kost om het willekeurige getal voor elke rij te genereren.
MySQL selecteert willekeurige records met behulp van INNER JOIN-clausule
Deze techniek vereist dat de tabel een auto-increment primair sleutelveld heeft en dat er geen gat in de reeks is.
De volgende query genereert een willekeurig getal op basis van de primaire sleutelkolom:
Code language: SQL (Structured Query Language) (sql)
We kunnen de tabel als volgt verbinden met de resultatenreeks die de bovenstaande query oplevert:
Code language: SQL (Structured Query Language) (sql)
Wanneer u deze techniek gebruikt, moet u de query meerdere keren uitvoeren om meer dan één willekeurige rij te krijgen, want als u de limiet verhoogt, geeft de query alleen opeenvolgende rijen die beginnen bij de willekeurig geselecteerde rij.
De volgende query retourneert een willekeurige klant uit de tabel customers
.
Code language: SQL (Structured Query Language) (sql)
Probeer het eens
MySQL select random records using variables
In het geval dat de tabel id
kolommen heeft met waarden die binnen een bereik 1..N
vallen en er geen gat in het bereik is, kunt u de volgende techniek gebruiken:
- Selecteer eerst willekeurige getallen in het bereik 1…N.
- Tweede, kies de records op basis van de willekeurige getallen.
Het volgende statement helpt u dit te bereiken:
Code language: SQL (Structured Query Language) (sql)
Merk op dat de door de gebruiker gedefinieerde variabelen verbindingsspecifiek zijn. Dit betekent dat deze techniek niet kan worden gebruikt met de connection pooling. Bovendien moet de primaire sleutel van het type integer zijn en moeten de waarden in de reeks staan zonder hiaten.
In deze zelfstudie hebben we u verschillende technieken laten zien om willekeurige records uit een tabel te selecteren.
- Was deze zelfstudie nuttig?
- JaNee