MySQL eredményhalmaz véletlenszerű rendezése

Vannak olyan esetek, amikor véletlenszerűen kell rendezni egy MySQL eredményhalmazt, például amikor véletlenszerűen választunk ki néhány nyertest egy nyereménysorsoláshoz. Ebben a bejegyzésben azt nézzük meg, hogyan tehetjük ezt meg, a következő MySQL bejegyzésben pedig az adatok több oldalra történő “véletlenszerű” rendezését fogjuk megvizsgálni.

A nyereménysorsolás példájával élve, tegyük fel, hogy felmérést végeztünk, és a felmérést kitöltők közül 10 embernek díjat adnánk. Ezeket az embereket véletlenszerűen választanánk ki. A táblázat neve “felmérés”, és az elérhetőségeikre vagyunk kíváncsiak.

A táblázatból 10 rekord véletlenszerű sorrendben történő kiválasztásához a következőket kell tennünk:

SELECT first_name, last_name, email_address, phoneFROM surveyORDER BY RAND()LIMIT 10

Az ORDER BY RAND() sor véletlenszerűvé teszi az eredményhalmazt, a LIMIT 10 sor pedig csak az első 10 eredményt adja vissza.

A találati halmaz ilyen módon történő véletlenszerű rendezése nem hatékony és nagy találati halmazok esetén lassú lesz, mivel a véletlen számot minden sorra alkalmazni kell a rendezés előtt. A győztes kiválasztásához vagy hasonló körülmények között ez nagyszerű, de nem túl hasznos, ha több oldalon keresztül kell “véletlenszerű” eredményeket lapozni.

Ha “véletlenszerűen” kell adatokat lapozni, a RAND() használata nem túl hasznos, mert ugyanazok a rekordok több oldalon is megjelennek, és nem kapunk konzisztens adathalmazt, ha ugyanazokat az oldalakat lapozzuk vissza és előre. A jövő heti MySQL-posztban megnézem, hogyan lehet ezt megtenni. Győződjön meg róla, hogy feliratkozik az RSS feedemre (részletek alább), hogy ne maradjon le.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.