Summarum: I denne vejledning lærer du forskellige teknikker til at vælge tilfældige poster fra en databasetabel i MySQL.

I nogle tilfælde skal du vælge tilfældige poster fra en tabel, for eksempel:

  • Vælg nogle tilfældige indlæg i en blog og vis dem i sidebaren.
  • Vælg et tilfældigt citat til visning af “dagens citat”-widget.
  • Vælg tilfældige billeder i et galleri og brug dem som de fremhævede billeder.

MySQL vælger tilfældige poster ved hjælp af ORDER BY RAND()

MySQL har ikke nogen indbygget anvisning til at vælge tilfældige rækker fra en tabel. For at opnå dette bruger du funktionen RAND().

Den følgende forespørgsel vælger en tilfældig række fra en databasetabel:

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

Lad os undersøge forespørgslen nærmere.

  • Funktionen RAND() genererer en tilfældig værdi for hver række i tabellen.
  • Klausulen ORDER BY sorterer alle rækker i tabellen efter det tilfældige tal, der er genereret af funktionen RAND().
  • Klausulen LIMITplukker den første række i resultatsættet, der er sorteret tilfældigt.

Hvis du vil vælge N tilfældige poster fra en databasetabel, skal du ændre LIMIT-klausulen på følgende måde:

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

Se følgende customerstabel fra eksempeldatabasen.

Det følgende eksempel vælger fem tilfældige kunder fra customers-tabellen:

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

Afprøv det

Bemærk, at du muligvis får et andet resultatsæt, fordi det er tilfældigt.

Denne teknik fungerer meget godt med en lille tabel. Men den vil være langsom for den store tabel, fordi MySQL skal sortere hele tabellen for at vælge de tilfældige.

Hastigheden af forespørgslen afhænger også af antallet af rækker i tabellen. Jo flere rækker tabellen har, jo mere tid tager det at generere det tilfældige nummer for hver række.

MySQL select random records using INNER JOIN clause

Denne teknik kræver, at tabellen har et auto-inkrementerende primærnøglefelt, og at der ikke er noget hul i sekvensen.

Følgende forespørgsel genererer et tilfældigt tal baseret på primærnøglekolonnen:

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

Vi kan føje tabellen med det resultatsæt, der returneres af ovenstående forespørgsel, på følgende måde:

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

Med denne teknik skal du udføre forespørgslen flere gange for at få mere end én tilfældig række, for hvis du øger grænsen, vil forespørgslen kun give dig sekventielle rækker, der starter fra den tilfældigt valgte række.

Den følgende forespørgsel returnerer en tilfældig kunde fra tabellen customers.

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

Afprøv det

MySQL select random records using variables

Hvis tabellen har id-kolonnen med værdierne, der falder inden for et område 1..N, og der ikke er noget hul i området, kan du bruge følgende teknik:

  • Først skal du vælge tilfældige tal i området 1..N.
  • For det andet skal du vælge posterne på grundlag af de tilfældige tal.

Den følgende anvisning hjælper dig med at opnå dette:

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

Bemærk, at de brugerdefinerede variabler er forbindelsesspecifikke. Det betyder, at denne teknik ikke kan bruges med forbindelsespooling. Desuden skal primærnøglen være af typen heltal, og dens værdier skal være i rækkefølge uden huller.

I denne vejledning har vi vist dig flere teknikker til at vælge tilfældige poster fra en tabel.

  • Blev denne vejledning brugt?
  • JaNej

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.