09.02.2018, Vladimír Klaus, navštíveno 2375x
Určitě občas potřebujete získat náhodnou sadu záznamů z dané tabulky či dotazu. Nemělo by to být nic zásadně složitého, ale jsou tu jistá specifika, alespoň pokud jde o MS Access.
MS Access
Asi velice rychle najdete, jak řešit náhodné pořadí v Accessu.
SELECT * FROM Clanky ORDER BY RND(ID)
Jenomže také velice rychle zjistíte, že náhodné pořadí je stále stejně náhodné. Pokud byste používali Visual Basic a obecně prostředí Accessu, pak by se dalo použít funkce Randomize(), která zajistí, aby ta náhodnost byla opravdu náhodná :) Ovšem pokud potřebujete pouze zavolat nějaký dotaz nad Access databází, pak Randomize nemáte jak použít.
Po řadě pokusů, pátrání a různých testů jsem našel řešení, které docela uspokojivě funguje.
SELECT * FROM Clanky ORDER BY RND(-Timer()*ID)
SQL Server
V případě SQL Serveru je situace mnohem jednodušší a to pomocí funkce NEWID(), která generuje unikátní GUID.
SELECT * FROM Clanky ORDER BY NEWID()
Samozřejmě generování nějakou dobu trvá, takže je vhodné dotaz nějak omezit, zvláště pokud potřebujete třeba jen jeden náhodně vybraný záznam.
SELECT TOP 1 * FROM Clanky ORDER BY NEWID()
Zdroje: