Rezumat: în acest tutorial, veți învăța diverse tehnici pentru a selecta înregistrări aleatorii dintr-un tabel de baze de date în MySQL.
Câteodată, trebuie să selectați înregistrări aleatorii dintr-un tabel, de exemplu:
- Selectarea unor postări aleatorii într-un blog și afișarea lor în bara laterală.
- Selectarea unui citat aleatoriu pentru afișarea widget-ului „citatul zilei”.
- Selectarea unor imagini aleatorii într-o galerie și utilizarea lor ca imagini recomandate.
MySQL selectează înregistrări aleatorii folosind ORDER BY RAND()
MySQL nu are nicio instrucțiune încorporată pentru a selecta rânduri aleatorii dintr-un tabel. Pentru a realiza acest lucru, utilizați funcția RAND()
.
Următoarea interogare selectează un rând aleatoriu dintr-un tabel de bază de date:
Code language: SQL (Structured Query Language) (sql)
Să examinăm interogarea mai în detaliu.
- Funcția
RAND()
generează o valoare aleatorie pentru fiecare rând din tabel. - Clauza
ORDER BY
sortează toate rândurile din tabel în funcție de numărul aleatoriu generat de funcțiaRAND()
. - Clauza
LIMIT
alege primul rând din setul de rezultate sortat aleatoriu.
Dacă doriți să selectați N
înregistrări aleatorii N
dintr-un tabel din baza de date, trebuie să modificați clauza LIMIT
după cum urmează:
Code language: SQL (Structured Query Language) (sql)
Vezi următorul customers
tabel din baza de date de exemplu.
Exemplul următor selectează cinci clienți aleatori din tabelul customers
:
Code language: SQL (Structured Query Language) (sql)
Încercați
Rețineți că este posibil să obțineți un set de rezultate diferit deoarece este aleatoriu.
Această tehnică funcționează foarte bine cu un tabel mic. Cu toate acestea, va fi lentă pentru un tabel mare deoarece MySQL trebuie să sorteze întregul tabel pentru a selecta cele aleatorii.
Viteza interogării depinde și de numărul de rânduri din tabel. Cu cât tabelul are mai multe rânduri, cu atât este nevoie de mai mult timp pentru a genera numărul aleatoriu pentru fiecare rând.
MySQL selectează înregistrări aleatorii folosind clauza INNER JOIN
Această tehnică necesită ca tabelul să aibă un câmp de cheie primară cu autoincrementare și să nu existe niciun decalaj în secvență.
Următoarea interogare generează un număr aleatoriu pe baza coloanei cheie primară:
Code language: SQL (Structured Query Language) (sql)
Potem să ne alăturăm tabelului cu setul de rezultate returnat de interogarea de mai sus după cum urmează:
Code language: SQL (Structured Query Language) (sql)
Utilizând această tehnică, trebuie să executați interogarea de mai multe ori pentru a obține mai mult de un rând aleatoriu, deoarece, dacă măriți limita, interogarea vă va oferi numai rânduri secvențiale care încep de la rândul selectat aleatoriu.
Următoarea interogare returnează un client aleatoriu din tabelul customers
.
Code language: SQL (Structured Query Language) (sql)
Încercați
MySQL selectează înregistrări aleatoare folosind variabile
În cazul în care, tabelul are coloana id
cu valori care se încadrează într-un interval 1..N
și nu există niciun decalaj în interval, puteți utiliza următoarea tehnică:
- În primul rând, selectați numere aleatoare în intervalul 1..N.
- În al doilea rând, selectați înregistrările pe baza numerelor aleatoare.
Următoarea instrucțiune vă ajută să realizați acest lucru:
Code language: SQL (Structured Query Language) (sql)
Rețineți că variabilele definite de utilizator sunt specifice conexiunii. Aceasta înseamnă că această tehnică nu poate fi utilizată cu gruparea conexiunilor. În plus, cheia primară trebuie să fie de tip întreg și valorile sale trebuie să fie în secvență fără goluri.
În acest tutorial, v-am prezentat mai multe tehnici pentru a selecta înregistrări aleatorii dintr-un tabel.
- A fost util acest tutorial?
- DaNu
.