Autor Zpráva
ReVolt
Profil
Nazdar, potřeboval bych na stránky ke komentářům a do kontaktního formuláře antispam, nechci nějakou už vytvořenou apikaci a tak mě napadlo že to udělám přes databázi, ale nevím jak to udělat, aby z několika číselných kombinací, které vložím do připravené tabulky, skript náhodně jednu z nich vybral a zobrazil.
jenikkozak
Profil
SELECT sloupec FROM tabulka WHERE podminky ORDER BY rand() LIMIT 1
blaaablaaa
Profil
SELECT X FROM tbl ORDER BY RAND() LIMIT 1
//edit: pozde ;)
Chamurappi
Profil
Reaguji na ReVolta:
Pokud neválčíš s robotem zacíleným vyloženě na tvé komentáře, tak nepotřebuješ náhodně volit číselnou kombinaci. Antispam této diskuse se již několik let ptá na číslo dvacet čtyři a nevzpomínám si, že by se do něj nějaký spambot trefil.
__construct
Profil
jenikkozak, blaaablaaa:
.. ORDER BY RAND() LIMIT 1 je dosť blbý ťah
blaaablaaa
Profil
__construct:
100 000 zaznamu (ID AI, varchar s md5) v jedne myisam tabulce:
SELECT * FROM `tmp_tbl` ORDER BY RAND( ) LIMIT 1

Dotaz zabral 0.0677 sekund
Takze to v tomto pripade nevadi ;)
blaaablaaa
Profil
Ale jinak souhlasim s Chamurappim, ja to (zatim uspesne) pouzivam s predvyplnenim pomoci JS.
__construct
Profil
<mimo-téma>
blaaablaaa:
Skús si to dať do PHP skriptu - spravil som si test s ORDER BY RAND() LIMIT 1; a potom druhým spôsobom:
$r = mysql_query("SELECT count(*) FROM tabulka");  
$d = mysql_fetch_row($r);  
$rand = mt_rand(0,$d[0] - 1);  
   
$r = mysql_query("SELECT niečo FROM tabulka LIMIT $rand, 1");
$d = mysql_fetch_row($r);

Druhý spôsob mal čas polovičný pri tabuľke s cca. 300k záznamov.
</mimo-téma>
A aby mi tento komentár nezmazali tak sa tiež prikláňam k riešeniu s JS - mne pomáha úspešne
ReVolt
Profil
Díky všem, všechno ozkouším a uvidím co bude nejlepší

EDIT: použil jsem metodu náhodného výběru z tabulky, příkaz, který napsali jenikkozak a blaaablaaa funguje jak má :)
ještě jednou vám všem moc děkuju

Vaše odpověď

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0