Portál AbcLinuxu, 7. května 2025 06:29

Dotaz: Firebird - výběr náhodného řádku

Johny z Podoli avatar 12.9.2011 14:29 Johny z Podoli | skóre: 26 | blog: rocfdebian
Firebird - výběr náhodného řádku
Přečteno: 279×
Odpovědět | Admin
Potřebuji z tabulky OBRAZEK vybrat náhodný řádek. Používám Firebird 2.1. Internet je plný informací, jak to přímo DB neumí. je třeba Deklarovat externí funkci
DECLARE EXTERNAL FUNCTION rand RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_rand' MODULE_NAME 'ib_udf';
Nicméně ani pak, dle popisu všude možně, není můj select náhodný, vrací vždy stejný řádek.
SELECT * from OBRAZEK ORDER BY (Rand())
netušíte někdo, jak tomuto vdechnout život? Dělám web který je defakto založen na různých "náhodných" řádcích ;-)

Děkuji

Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (PetrHL)
12.9.2011 15:02 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Firebird - výběr náhodného řádku
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je známá vlastnost, ta funkce se totiž vyhodnocuje jen jednou pro daný select, ne pro každý řádek znovu. Nejjednodušší asi bude spočítat si náhodné číslo od 0 do počtu řádků minus jedna a použít 'first 1 skip N'.
Johny z Podoli avatar 12.9.2011 15:07 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: Firebird - výběr náhodného řádku
Jenže:

1) mě opakovaný select vždy vrací stejný řádak.. proč to tak je?
Řešení co navrhujete tam zrovna mám, ale skoro vždy se mi zobrazí záznam 1000... protože tabulka obsahuje data nerovnoměrně, ID 1,2,3 pak nic a najednou 1000,1001,1002.. - je po velké pauza. Právě z tohoto důvodu hledám nějaké jiné řešení, které by fungovalo.

Děkuji za nápady
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
12.9.2011 15:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Firebird - výběr náhodného řádku
mě opakovaný select vždy vrací stejný řádak.. proč to tak je?

Právě proto, že de facto řadíte podle konstanty, což vyjde pokaždé stejně.

Řešení co navrhujete tam zrovna mám, ale skoro vždy se mi zobrazí záznam 1000... protože tabulka obsahuje data nerovnoměrně, ID 1,2,3 pak nic a najednou 1000,1001,1002.. - je po velké pauza.

Na to, co jsem psal, nemají nějaké hodnoty ID žádný vliv. Pokud z výstupu přeskočíte náhodný počet řádků a vezmete první, který následuje, nebude výsledek záviset na hodnotě nějakého sloupce (i kdyby to bylo primární klíč).

Johny z Podoli avatar 12.9.2011 15:46 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: Firebird - výběr náhodného řádku
Máte pravdu, já to měl blbě ... select first 1 where x > náhodné číslo. Tak jak řikáte, first, skip, to logicky musí běhat přesně jak potřebuji.

Děkuju
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.