Autor | Zpráva | ||
---|---|---|---|
Qvido Profil * |
#1 · Zasláno: 17. 6. 2008, 16:15:00
Zdravím,
potřebuji vybrat z DB tři náhodné řádky, ale každý musí být jiný. Kvůli strukruře stránek nemohu použít ORDER BY RAND() LIMIT 3, ale musím použít třikrát ORDER BY RAND() LIMIT 1. Problém je v tom, že se občas stane, že se zobrazí 2 stejné řádky (což je logické), ale já potřebuji pokaždé jiný řádek. Nevíte náhodou prosím někdo jak to lze udělat, abych měl pokaždé jiný řádek? Děkuji za vaše návrhy. |
||
Kajman_ Profil * |
#2 · Zasláno: 17. 6. 2008, 16:19:09
A proměnné mezi jedlotlivými místy na stránce nemůžete přenášet?
|
||
Ax Profil * |
#3 · Zasláno: 17. 6. 2008, 16:20:04
Pokud opravdu nemůžeš použít ORDER BY RAND() LIMIT 3, ale musíš použít třikrát ORDER BY RAND() LIMIT 1, přidej do druhého SQL dotazu něco jako WHERE id <> id_z_prvniho_dotazu a do třetího SQL dotazu něco jako WHERE id <> id_z_prvniho_dotazu AND id <> id_z_druheho_dotazu.
|
||
Joker Profil |
#4 · Zasláno: 17. 6. 2008, 16:21:27
Qvido
Kvůli strukruře stránek nemohu použít ORDER BY RAND() LIMIT 3 Moc si neumím představit situaci, která by tomuhle zabránila. Ledaže by se mezitím vkládaly nové řádky a nové náhodné výběry by měly obsahovat i ty nové řádky. Šlo by například si zapamatovat ID už vybraného záznamu a potom ho vyloučit |
||
joe Profil |
#5 · Zasláno: 17. 6. 2008, 16:44:09
Kvůli strukruře stránek nemohu použít ORDER BY RAND() LIMIT 3, ale musím použít třikrát ORDER BY RAND() LIMIT 1.
Můžeš to použít vždy, chce to jenom chtít :) |
||
ninja Profil |
#6 · Zasláno: 17. 6. 2008, 17:10:52
Kvůli strukruře stránek nemohu použít ORDER BY RAND() LIMIT 3, ale musím použít třikrát ORDER BY RAND() LIMIT 1.
Qvido: Povez nam prosim co je to za strukturu. |
||
Qvido Profil * |
#7 · Zasláno: 18. 6. 2008, 07:46:59
Joker
Šlo by například si zapamatovat ID už vybraného záznamu a potom ho vyloučit No to mě napadlo taky, ale jak ho mám vyloučit? RAND(-$id) asi není to pravé ořechové, že? :-) Ax WHERE id <> id_z_prvniho_dotazu a do třetího SQL dotazu něco jako WHERE id <> id_z_prvniho_dotazu AND id <> id_z_druheho_dotazu. To by mohlo být ono. Vyzkouším to. Děkuji. Kajman_ A proměnné mezi jedlotlivými místy na stránce nemůžete přenášet? Ano můžu, ale nevím jak bych to měl udělat abych měl v proměnných ty tři údaje. Výpis dat mám takto: $dotaz = mysql_query("SELECT * FROM jmena ORDER BY RAND() LIMIT 3"); while ($vypis = mysql_fetch_array($dotaz)) { $jmeno = $vypis["jmeno"]; } Pokud vypíšu $jmeno ještě ve while, tak to funguje, ale pokud jej vypíši mimo while, tak se vypíše pouze poslední řádek (to je celkem logické) a ve while to vypisovat nemůžu, protože to ukládám do třech různých sloupečků (každý sloupec je originál). ninja, joe a ostatní: Nejde to, protože data z DB přiřazuji třem různým sloupečkům a každý má jinačí složení (id, class, table, ...) Můžeš to použít vždy, chce to jenom chtít :) Možná by to šlo, ale to bych musel zvládat css a upravit si stránky tak aby byly dle mých požadavků. |
||
Kajman_ Profil * |
#8 · Zasláno: 18. 6. 2008, 08:08:51
$dotaz = mysql_query("SELECT * FROM jmena ORDER BY RAND() LIMIT 3"); $pole=array(); while ($vypis = mysql_fetch_array($dotaz)) { $pole[] = $vypis; } print_r($pole[0]); print_r($pole[1]); print_r($pole[2]); |
||
Qvido Profil * |
#9 · Zasláno: 18. 6. 2008, 09:21:27
Kajman_
Tak to jsem vůbec netušil, že je něco takového možné. Děkuji Vám mnohokrát. |
||
Joker Profil |
#10 · Zasláno: 18. 6. 2008, 09:27:05
Qvido
Tak to jsem vůbec netušil, že je něco takového možné. Pole jsou vcelku běžná součást programovacích jazyků. |
||
Qvido Profil * |
#11 · Zasláno: 18. 6. 2008, 10:20:32
Pole jsou vcelku běžná součást programovacích jazyků.
Ale to vím, jenomže jsem netušil, že to lze takto spojit s while. |
||
Časová prodleva: 1 rok
|
|||
Tomáš Fejfar Profil * |
#12 · Zasláno: 8. 12. 2009, 17:23:25
Vzhledem k tomu, že toto vlákno je asi 2. na goolu při hledání způsobu na výpis náhodných řádků tabulky, tak si ho dovolím otevřít.
ORDER BY RAND() LIMIT 3 SELECT .... WHERE id IN (123,321,456,654,789,987, ... ,11) LIMIT 3 Případně se dá ještě v PHP ošetřit pomocí count($result) |
||
Časová prodleva: 14 let
|
0