Shrnutí: v tomto tutoriálu se naučíte různé techniky výběru náhodných záznamů z databázové tabulky v MySQL.

Někdy je třeba vybrat náhodné záznamy z tabulky, například:

  • Vybrat některé náhodné příspěvky na blogu a zobrazit je v postranním panelu.
  • Vybrat náhodný citát pro zobrazení widgetu „citát dne“.
  • Vybrat náhodné obrázky v galerii a použít je jako hlavní obrázky.

MySQL vybere náhodné záznamy pomocí ORDER BY RAND()

MySQL nemá žádný vestavěný příkaz pro výběr náhodných řádků z tabulky. K tomu slouží funkce RAND().

Následující dotaz vybere náhodný řádek z tabulky databáze:

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

Podívejme se na dotaz podrobněji.

  • Funkce RAND() generuje náhodnou hodnotu pro každý řádek v tabulce.
  • Klauzule ORDER BY seřadí všechny řádky v tabulce podle náhodného čísla vygenerovaného funkcí RAND().
  • Klauzule LIMIT vybere první náhodně seřazený řádek v souboru výsledků.

Pokud chcete vybrat Nnáhodné záznamy z databázové tabulky, musíte změnit klauzuli LIMIT takto:

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

Podívejte se na následující customers tabulku z ukázkové databáze.

Následující příklad vybere pět náhodných zákazníků z tabulky customers:

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

Vyzkoušejte si to

Všimněte si, že můžete získat jinou sadu výsledků, protože je náhodná.

Tato technika funguje velmi dobře u malé tabulky. U velké tabulky však bude pomalá, protože MySQL musí celou tabulku seřadit, aby vybrala náhodné.

Rychlost dotazu závisí také na počtu řádků v tabulce. Čím více řádků tabulka má, tím více času zabere generování náhodného čísla pro každý řádek.

MySQL vybere náhodné záznamy pomocí klauzule INNER JOIN

Tato technika vyžaduje, aby tabulka měla pole primárního klíče s automatickou inkrementací a v posloupnosti nebyla žádná mezera.

Následující dotaz generuje náhodné číslo na základě sloupce primárního klíče:

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

Tabulku můžeme spojit s množinou výsledků vrácenou výše uvedeným dotazem takto:

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

Při použití této techniky musíte dotaz provést vícekrát, abyste získali více než jeden náhodný řádek, protože pokud zvýšíte limit, dotaz vám poskytne pouze sekvenční řádky, které začínají od náhodně vybraného řádku.

Následující dotaz vrátí náhodného zákazníka z tabulky customers.

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

Vyzkoušejte to

MySQL vyberte náhodné záznamy pomocí proměnných

V případě, že tabulka má sloupec id s hodnotami, které spadají do rozsahu 1..N a v rozsahu není mezera, můžete použít následující techniku:

  • Nejprve vyberte náhodná čísla v rozsahu 1..N.
  • Druhé, vyberte záznamy na základě náhodných čísel.

Následující příkaz vám pomůže dosáhnout tohoto cíle:

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

Všimněte si, že uživatelsky definované proměnné jsou specifické pro připojení. To znamená, že tuto techniku nelze použít s poolingem připojení. Navíc primární klíč musí být celočíselného typu a jeho hodnoty musí být v posloupnosti bez mezer.

V tomto návodu jsme si ukázali několik technik výběru náhodných záznamů z tabulky.

  • Pomohl vám tento návod?
  • AnoNe

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.