| 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: 17 let
|
|||
0