Jei norite, kad gautas rekordas būtų užsakyta atsitiktinai , turėtumėte naudoti šiuos kodus pagal kelias duomenų bazes.
Čia kyla klausimas: kam reikia gauti atsitiktinį įrašą ar eilutę iš duomenų bazės?
Kartais galbūt norėsite rodyti atsitiktinę informaciją, pvz straipsniai, nuorodos, puslapiai ir pan. savo vartotojui.
Jei norite gauti atsitiktines eilutes iš bet kurios duomenų bazės, turite naudoti kai kurias pakeistas užklausas pagal duomenų bazes.
Jei norite grąžinti atsitiktinę eilutę su MANO SQL, naudokite šią sintaksę:
SELECT column FROM table ORDER BY RAND () LIMIT 1;
SELECT column FROM table ORDER BY RANDOM () LIMIT 1;
SELECT TOP 1 column FROM table ORDER BY NEWID ();
SELECT column FROM (SELECT column FROM table ORDER BY dbms_random.value) WHERE rownum = 1;
SELECT column RAND () as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLY;
Norėdami praktiškai suprasti šią sąvoką, pažiūrėkime kelis pavyzdžius naudojant MySQL duomenų bazę. Apsvarstykite, kad duomenų bazėje sukūrėme lentelės elementus su šiais duomenimis:
Lentelė: elementai
ID | Daikto pavadinimas | Prekės_kiekis | Prekė_Kaina | Pirkimo data |
---|---|---|---|---|
1 | Muilas | 5 | 200 2021-07-08 | |
2 | Dantų pasta | 2 | 80 | 2021-07-10 |
3 | Rašiklis | 10 | penkiasdešimt | 2021-07-12 |
4 | Butelis | 1 | 250 | 2021-07-13 |
5 | Šepetys | 3 | 90 | 2021-07-15 |
Tarkime, kad norime gauti bet kokį atsitiktinį įrašą iš elementų lentelės.
Užklausą parašysime taip:
mysql> SELECT * FROM items ORDER BY RAND () LIMIT 1;
Galime gauti šiuos rezultatus:
ID | Daikto pavadinimas | Prekės_kiekis | Prekė_Kaina | Pirkimo data |
---|---|---|---|---|
3 | Rašiklis | 10 | dvidešimt | 2021-07-12 |
Dabar pabandykime dar kartą įvykdyti tą pačią užklausą.
mysql> SELECT * FROM items ORDER BY RAND () LIMIT 1;
Galime gauti šiuos rezultatus:
ID | Daikto pavadinimas | Prekės_kiekis | Prekė_Kaina | Pirkimo data |
---|---|---|---|---|
5 | Šepetys | 3 | 90 | 2021-07-15 |
Iš aukščiau pateiktų rezultatų galime daryti išvadą, kad abu kartus gauname skirtingus įrašus, net jei tą pačią užklausą vykdėme du kartus. Funkcija RAND () pasirinko atsitiktinius įrašus abu kartus tai pačiai užklausai iš vienos lentelės. Todėl net ir dar kartą vykdydami tą pačią užklausą, kiekvieną kartą gausime skirtingą išvestį. Yra reta galimybė gauti tą patį įrašą iš eilės naudojant RAND () funkciją.
Tarkime, kad norite, kad visi lentelės įrašai būtų gauti atsitiktinai.
Norėdami tai padaryti, turime vykdyti šią užklausą:
mysql> SELECT * FROM items ORDER BY RAND ();
Galime gauti šiuos rezultatus:
ID | Daikto pavadinimas | Prekės_kiekis | Prekė_Kaina | Pirkimo data |
---|---|---|---|---|
4 | Butelis | 1 | 250 | 2021-07-13 |
5 | Šepetys | 3 | 90 | 2021-07-15 |
1 | Muilas | 5 | 200 | 2021-07-08 |
2 | Dantų pasta | 2 | 80 | 2021-07-10 |
3 | Rašiklis | 10 | penkiasdešimt | 2021-07-12 |
Taip pat yra galimybė gauti skirtingus įrašų išdėstymus, jei dar kartą vykdysime funkciją RAND () darbuotojų lentelėje.