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 |
#2 · Zasláno: 2. 4. 2013, 13:34:26
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 |
#3 · Zasláno: 2. 4. 2013, 14:12:56
juriad:
vdaka za napady tie prve dva body napadli aj mna ale najlepsia riesenie bude asi 3ka |
||
Kajman Profil |
#4 · Zasláno: 2. 4. 2013, 14:26:42
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 |
||
Časová prodleva: 11 let
|
0