logo

SQL TVARKA ATSITIKTINIU BŪDU

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.

    Pasirinkite atsitiktinę eilutę naudodami MySQL:

Jei norite grąžinti atsitiktinę eilutę su MANO SQL, naudokite šią sintaksę:

 SELECT column FROM table ORDER BY RAND () LIMIT 1; 
    Pasirinkite atsitiktinę eilutę naudodami Postgre SQL:
 SELECT column FROM table ORDER BY RANDOM () LIMIT 1; 
    Pasirinkite atsitiktinę eilutę su SQL serveriu:
 SELECT TOP 1 column FROM table ORDER BY NEWID (); 
    Pasirinkite atsitiktinę eilutę su orakulu:
 SELECT column FROM (SELECT column FROM table ORDER BY dbms_random.value) WHERE rownum = 1; 
    Pasirinkite atsitiktinę eilutę su IBM DB2:
 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.