Sammanfattning: I den här handledningen lär du dig olika tekniker för att välja slumpmässiga poster från en databastabell i MySQL.
Ibland måste du välja slumpmässiga poster från en tabell, till exempel:
- Välja några slumpmässiga inlägg i en blogg och visa dem i sidofältet.
- Välja ett slumpmässigt citat för att visa widgeten ”dagens citat”.
- Välja slumpmässiga bilder i ett galleri och använda dem som de presenterade bilderna.
MySQL väljer slumpmässiga poster med ORDER BY RAND()
MySQL har inget inbyggt uttalande för att välja slumpmässiga rader från en tabell. För att åstadkomma detta använder du funktionen RAND()
.
Följande fråga väljer en slumpmässig rad från en databastabell:
Code language: SQL (Structured Query Language) (sql)
Låt oss undersöka frågan mer i detalj.
- Funktionen
RAND()
genererar ett slumpmässigt värde för varje rad i tabellen. - Klausulen
ORDER BY
sorterar alla rader i tabellen efter det slumpmässiga tal som genereras av funktionenRAND()
. - Klausulen
LIMIT
plockar den första raden i den slumpmässigt sorterade resultatuppsättningen.
Om du vill välja N
slumpmässiga poster från en databastabell måste du ändra LIMIT
-klausulen på följande sätt:
Code language: SQL (Structured Query Language) (sql)
Se följande customers
tabell från exempeldatabasen.
Följande exempel väljer fem slumpmässiga kunder från customers
tabellen:
Code language: SQL (Structured Query Language) (sql)
Att prova
Observera att du kan få en annan resultatuppsättning eftersom det är slumpmässigt.
Den här tekniken fungerar mycket bra med en liten tabell. Den blir dock långsam för den stora tabellen eftersom MySQL måste sortera hela tabellen för att välja de slumpmässiga.
Förfrågningens hastighet beror också på antalet rader i tabellen. Ju fler rader tabellen har, desto mer tid tar det att generera det slumpmässiga numret för varje rad.
MySQL väljer slumpmässiga poster med hjälp av INNER JOIN-klausulen
Denna teknik kräver att tabellen har ett primärnyckelfält med automatisk ökning och att det inte finns någon lucka i sekvensen.
Följande fråga genererar ett slumpmässigt tal baserat på primärnyckelkolumnen:
Code language: SQL (Structured Query Language) (sql)
Vi kan gå samman med tabellen med den resultatuppsättning som returneras av ovanstående fråga på följande sätt:
Code language: SQL (Structured Query Language) (sql)
Med den här tekniken måste du exekvera frågan flera gånger för att få mer än en slumpmässig rad, eftersom om du ökar gränsen kommer frågan endast att ge dig sekventiella rader som startar från den slumpmässigt valda raden.
Följande fråga returnerar en slumpmässig kund från tabellen customers
.
Code language: SQL (Structured Query Language) (sql)
Att prova
MySQL välj slumpmässiga poster med hjälp av variabler
Om tabellen har kolumnen id
med värden som faller inom intervallet 1..N
och det inte finns någon lucka i intervallet, kan du använda följande teknik:
- Först väljer du slumpmässiga tal i intervallet 1..N.
- För det andra väljer du ut posterna utifrån de slumpmässiga numren.
Följande instruktion hjälper dig att åstadkomma detta:
Code language: SQL (Structured Query Language) (sql)
Observera att de användardefinierade variablerna är anslutningsspecifika. Det innebär att den här tekniken inte kan användas med anslutningspooling. Dessutom måste primärnyckeln vara av typen heltal och dess värden måste vara i sekvens utan luckor.
I den här handledningen har vi visat dig flera tekniker för att välja slumpmässiga poster från en tabell.
- Har du nytta av den här handledningen?
- JaNej