Autor Zpráva
František Hliva
Profil
Na hlavnej stránke by som chcel mať náhodne vybraté profily užívateľov, tak aby sa pri kliknutí na ďalšie podstránky zobrazili ďalšie náhodne vybraté polžky s tým že nesmú byť rovnaké ako na predchádzajúcich podstánkach.

Viem že nánhodný výber sa robí tak, že sa položky zoradia funkciou RAND():

SELECT * FROM users ORDER BY RAND() LIMIT 50

Ale ako zabezpečiť aby sa pri prechode na ďalšiu podstránku nezobrazili aj rovnaké položky ako na predchádzajúcej?
juriad
Profil
1) Musíš si zapamatovat všechny, které jsi už zobrazil a ty vyfiltrovat (WHERE id NOT IN ...). Může být pomalé na stránkách s vysokým číslem.
2) Nebo si můžeš vytáhnout těch položek už dopředu třeba pětinásobek s tím, že položky 51-250 uložíš do SESSION a na dalších stránkách je vypišeš aniž bys pokládal dotaz do databáze. Může být hodně náročné na paměť.
1.5) Můžeš si vytáhnou jen několik set id-éček, ty si uložíš do SESSION a následně při stránkování k nim dotáhneš položky.
3) Ale většinou se na zákaz opakování dlabe (za předpokladu, že celkem je položek mnohem více, než počet položek zobrazených na jedné straně).
František Hliva
Profil
juriad:

vdaka za napady tie prve dva body napadli aj mna

ale najlepsia riesenie bude asi 3ka
Kajman
Profil
Také si můžete každý den položky náhodně jednoznačně očíslovat v pomocném sloupci. Pak si vygenerujete náhodný offset pro aktuálního uživatele
a bude mít tedy např dotaz
where sloupec_nahoda>4242 order by sloupec_nahoda limit 50
V session si můžete offset přenášet, aby po kliknutí další a předchozí měl stejné položky (pokud to je vůbec nutné řešit).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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