Losowy rekord 
 
Losowy rekord
Zobacz wiadomo¶ci
 
Cytat
A gdyby tak siê wedrzeæ na umys³ów górê, / Gdyby stan±æ na ludzkich my¶li piramidzie, / I przebiæ czo³em przes±dów chmurê, / I byæ najwy¿sz± my¶l± wcielon±. . . Juliusz S³owacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Losowy rekord



Tomasz Pyra - 23-03-2007 00:02
Losowy rekord
  Czy jest jaka¶ metoda na szybkie pobranie losowego rekordu z tabeli?

Mo¿na zastosowaæ takie zapytanie:
SELECT * FROM table WHERE 1 ORDER BY RAND( ) LIMIT 1;

ale jest to rozwi±zanie bardzo wolne w przypadku du¿ej tabeli.
Posiadam w tej tabeli indeks o mocy równej ilo¶ci elementów (jednak nie
posiadaj±cy równomiernego rozk³adu) - mo¿e z tego da siê jako¶
skorzystaæ ¿eby wybraæ element o losowym numerze?





Tomasz Pyra - 23-03-2007 00:02

  Tomasz Pyra napisa³(a):
> Czy jest jaka¶ metoda na szybkie pobranie losowego rekordu z tabeli?
>
> Mo¿na zastosowaæ takie zapytanie:
> SELECT * FROM table WHERE 1 ORDER BY RAND( ) LIMIT 1;

Aha... Baza MySQL 5




Maciek Dobrzanski - 23-03-2007 00:02

  In news:ettpfr$fh$2@news.task.gda.pl,
Tomasz Pyra <hellfire@spam.spam.spam> wrote:

>> Czy jest jaka¶ metoda na szybkie pobranie losowego rekordu z tabeli?
>>
>> Mo¿na zastosowaæ takie zapytanie:
>> SELECT * FROM table WHERE 1 ORDER BY RAND( ) LIMIT 1;
>
> Aha... Baza MySQL 5

By³o jakie¶ 2 m-ce temu w kontek¶cie Postgresa.

- mo¿e byæ wiêc tak
http://www.depesz.com/index.php/2007...z-bazy-danych/
tylko trzeba procedurê przepisaæ na MySQL

- mo¿e byæ tak
SELECT * FROM table JOIN (SELECT (RAND()*(SELECT MAX(id) FROM table)) AS id)
AS table2 WHERE table.id >= table2.id LIMIT 1;
ale bêdzie problem je¶li id jest nieci±g³e.

- je¶li id jest nieci±g³e lub nie ma go w postaci liczbowej, mo¿na pos³u¿yæ
siê zewnêtrzn± tabel± mapuj±c± PK do identyfikatorów liczbowych i po³±czyæ
to z jedn± z powy¿szych metod

Maciek




Tomasz Pyra - 23-03-2007 00:02

  Maciek Dobrzanski napisa³(a):

> - mo¿e byæ tak
> SELECT * FROM table JOIN (SELECT (RAND()*(SELECT MAX(id) FROM table)) AS id)
> AS table2 WHERE table.id >= table2.id LIMIT 1;
> ale bêdzie problem je¶li id jest nieci±g³e.

Dorobi³em ci±g³y indeks i dzia³a :)

A mam jeszcze pytanie - bo pierwszy pomys³ mia³em taki:
SELECT * FROM table
WHERE id=(
SELECT FLOOR(RAND()*(SELECT (SELECT MAX(id) FROM table )-(SELECT MIN(id)
FROM table )))
)

Ale nie dzia³a to dobrze chocia¿ teoretycznie mi siê wydaje ¿e powinno.
Po prostu podzapytanie wykonywane jest dla ka¿dego rekordu tabeli
osobno, przez co ca³o¶æ dzia³a bardzo wolno, a samo zapytanie mo¿e nic
nie zwróciæ, albo zwróciæ kilka rekordów w zale¿no¶ci od szczê¶cia.
Dlaczego w takiej konstrukcji podzapytanie jest wykonywane wielokrotnie?





=?iso-8859-2?Q?=A3ukasz?= Kalbarczyk - 23-03-2007 00:02

  Dnia Thu, 22 Mar 2007 15:31:20 +0100, Tomasz Pyra napisaù(a):

> Maciek Dobrzanski napisaù(a):
>> - moýe byã tak
>> SELECT * FROM table JOIN (SELECT (RAND()*(SELECT MAX(id) FROM table)) AS id)
>> AS table2 WHERE table.id >= table2.id LIMIT 1;
>> ale bædzie problem je¶li id jest nieci±gùe.
> Dorobiùem ciàgùy indeks i dziaùa :)
> A mam jeszcze pytanie - bo pierwszy pomysù miaùem taki:
> SELECT * FROM table
> WHERE id=(
> SELECT FLOOR(RAND()*(SELECT (SELECT MAX(id) FROM table )-(SELECT MIN(id)
> FROM table )))
> )
> Ale nie dziaùa to dobrze chociaý teoretycznie mi siæ wydaje ýe powinno.
> Po prostu podzapytanie wykonywane jest dla kaýdego rekordu tabeli
> osobno, przez co caùoúã dziaùa bardzo wolno, a samo zapytanie moýe nic
> nie zwróciã, albo zwróciã kilka rekordów w zaleýnoúci od szczæúcia.
> Dlaczego w takiej konstrukcji podzapytanie jest wykonywane wielokrotnie?

Bo gdyby siæ wykonywaùo jednokrotnie, to byú siæ pytaù,
dlaczego jednokrotnie, podajàc odpowiedni przykùad.

Niemniej - moýe trzeba zrobiã to jakimú zùàczeniem
lub widokiem. Np. zbudowaã widok
CREATE VIEW widok AS Select RAND() /*From dual*/
i teraz
select tabela.* from widok (left) join tabela on...

Moýe to zadziaùa jeden raz?
Widok powinien byã dynamiczny.

--
ÙK (22.03.2007 23:41:37)
http://moze.sprawdz.sobie.to
Internet wolny od flasha?
http://www.flashfree.net




Maciek Dobrzanski - 24-03-2007 00:01

  In news:etu3vn$899$1@news.task.gda.pl,
Tomasz Pyra <hellfire@spam.spam.spam> wrote:

> Dorobi³em cišg³y indeks i dzia³a :)

Samo dodanie kolumny mo¿e nie wystarczyæ, bo je?li dane z tabeli sš czêsto
usuwane, to i tak powstanš dziury w sekwencji. Dlatego pisa³em o dodatkowej
tabeli mapujšcej PK na ID, która mog³aby byæ okresowo regenerowana.

> A mam jeszcze pytanie - bo pierwszy pomys³ mia³em taki:
> SELECT * FROM table
> WHERE id=(
> SELECT FLOOR(RAND()*(SELECT (SELECT MAX(id) FROM table )-(SELECT
> MIN(id) FROM table )))
> )
> Ale nie dzia³a to dobrze chocia¿ teoretycznie mi siê wydaje ¿e
> powinno. Po prostu podzapytanie wykonywane jest dla ka¿dego rekordu
> tabeli osobno

Po pierwsze to ca³y SELECT z id=(SELECT ...) jest zbêdny, bo ¿adnych danych
z nikšd nie pobierasz, wykonujesz jedynie arytmetykê:
RAND()*(max_id-min_id).

Po drugie. Baza zapewne zauwa¿a to pierwsze i eliminuje zbêdnego SELECTa, co
powoduje wrzucenie RAND() do warunku WHERE. RAND() w WHERE jest wykonywane
niezale¿nie dla ka¿dego sprawdzanego wiersza. W efekcie nie jest to to o co
chodzi, bo jego warto?æ zmienia siê w trakcie wykonywania zapytania.

Po trzecie, nawet pomijajšc dwa powy¿sze, a patrzšc jedynie na sens. Je?li
min_id = 10, max_id = 20, to co je?li RAND() wylosuje warto?æ np. 0.1? Co
taki warunek odnajdzie w tabeli?

Mimo wszystko spróbuj najpierw zrozumieæ te dwa podane przyk³ady. Na
przyk³ad jak dzia³a funkcja Depesza albo dlaczego JOIN z takim subselectem,
czy on jest szybki/wydajny, dlaczego `id` poszukiwane jest za pomocš
operatora '>=' a nie '=', itd.

Maciek




Maciek Dobrzanski - 24-03-2007 00:01

  In news:eu0aho$5p6$1@news.interia.pl,
Maciek Dobrzanski <mushu@WYTNIJ-TOpoczta.fm> wrote:

Ups, co¶ mi zkrzaczy³o krzaczki.

Maciek




Andrzej P. Wozniak - 24-03-2007 00:01

  Osoba podpisana jako Maciek Dobrzanski <mushu@WYTNIJ-TOpoczta.fm> w artykule
<news:eu0aiu$5pu$1@news.interia.pl> pisze:

> In news:eu0aho$5p6$1@news.interia.pl,
> Maciek Dobrzanski <mushu@WYTNIJ-TOpoczta.fm> wrote:
>
> Ups, co¶ mi zkrzaczy³o krzaczki.

Nie co¶, tylko Ty sam, bo nie chcia³o Ci siê skonfigurowaæ OE i wysy³asz
wiadomo¶ci niezgodne z MIME.

--
Andrzej P. Wo¼niak uszer@pochta.onet.pl (zamieñ miejscami z<->h w adresie)
Grand Inquisitor pl.internet.pomoc Trust No.1 http://evil.pl/pip/
Grand Inquisitor pl.comp.bazy-danych No.1 http://www.dbf.pl/faq/




Maciek Dobrzanski - 24-03-2007 00:01

  "Andrzej P. Wozniak" <uszer@poczta.onet.pl.invalid> wrote in message
news:eu1d1o$6u3$1@mx1.internetia.pl...

> Nie co¶, tylko Ty sam, bo nie chcia³o Ci siê skonfigurowaæ OE i wysy³asz
> wiadomo¶ci niezgodne z MIME.

Tym gorzej dla MIMA.

Maciek




Petersin - 07-04-2007 15:05
Best free anti spyware.
  <a href="http://go.winantispyware.com/MTUwNjU=/2/5590/ax=1/ed=1/ex=1/554/">WinAntiSpyware 2007</a>
<a href="http://go.privacyprotector.com/MTUwNjc=/2/5590/ax=1/ed=1/ex=1/554/">PrivacyProtector</a>
<a href="http://go.winantivirus.com/MTUwNjg=/2/5590/ax=1/ed=1/ex=1/554/">WinAntiVirusPRO 2007</a>
<a href="http://go.drivecleaner.com/MTUwNjk=/2/5590/ax=1/ed=1/ex=1/554/">DriveCleaner</a>
<a href="http://go.errorprotector.com/MTUwNzA=/2/5590/ctx=1/in=1/epp=1/554/">ErrorProtector</a>
<a href="http://go.errorsafe.com/MTUwNzE=/2/5590/ax=1/ed=1/ex=1/554/">ErrorSafe</a>
<a href="http://go.systemdoctor.com/MTUwNzI=/2/5590/ax=1/ed=1/ex=1/554/">SystemDoctor</a>
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= =?ISO-8859-2?Q?WY=B6wietlenie_rekord=F3w_pocz=B1wszy_od_?==?I SO-8859-2?Q?danej_litery=2E=2E=2E?= =?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?= [pgsql] Akcja w =?iso-8859-2?b?emFsZb9ub7ZjaQ==?= od liczby zmienionych =?iso-8859-1?q?rekord=F3w?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [mysql] Wyszukanie =?ISO-8859-2?Q?rekord=F3w=28powiazane_tabel?==?ISO-8859-2?Q?e=29?= [MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • atanvarne633.opx.pl
  • Cytat

    Decede mihi sole - nie zas³aniaj mi s³onca.
    Gdy kogo¶ kochasz, jeste¶ jak stworzyciel ¶wiata - na cokolwiek spojrzysz, nabiera to kszta³tu, wype³nia siê barw±, ¶wiat³em. Powietrze przytula siê do ciebie, choæby by³ mróz, a ty masz w sobie tyle rado¶ci, ¿e musisz j± rozdawaæ woko³o, bo siê w tobie nie mie¶ci
    Hoc fac - tak czyñ.
    A tergo - od ty³u; z ty³u.
    I czarne w³osy posiwiej±. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com