/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
PostgreSQL: Tilfældig række
Fra : Jonas Koch Bentzen


Dato : 26-01-02 12:18

Findes der en "order by rand()"-lignende funktion i PostgreSQL? "Order
by random()" virker tilsyneladende, men eftersom random() kun returnerer
et tilfældigt tal mellem 0 og 1, virker det lidt hack-agtigt at bruge
det.

Den måde, jeg har gjort det på nu, er at vælge alle ID'erne fra
databasen, finde ét af dem med PHP-funktionen array_rand() og så vælge
rækken hvor ID'et er det, der kom ud af array_rand(). Er det måden at
gøre det på, eller...?
--
Jonas Koch Bentzen

http://understroem.dk/

 
 
Mads Lie Jensen (26-01-2002)
Kommentar
Fra : Mads Lie Jensen


Dato : 26-01-02 12:33

On Sat, 26 Jan 2002 12:17:45 +0100, Jonas Koch Bentzen
<ingen.emailadresse@eksempel.dk> wrote:

>Findes der en "order by rand()"-lignende funktion i PostgreSQL? "Order
>by random()" virker tilsyneladende, men eftersom random() kun returnerer
>et tilfældigt tal mellem 0 og 1, virker det lidt hack-agtigt at bruge
>det.
>
>Den måde, jeg har gjort det på nu, er at vælge alle ID'erne fra
>databasen, finde ét af dem med PHP-funktionen array_rand() og så vælge
>rækken hvor ID'et er det, der kom ud af array_rand(). Er det måden at
>gøre det på, eller...?

For en lille uges tid siden kørte diskussionen om det samme bare i
mySQL.
Dengang kom en løsning ala:

$tal=find_tilfældigt_tal_mellem 1 og (SELECT count(*) from tabel)
SELECT * from tabel limit 1, $tal;

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Directory Opus - nu også til windows - http://www.gpsoft.com.au

Jonas Koch Bentzen (26-01-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-01-02 13:04

Mads Lie Jensen skrev:
>
> $tal=find_tilfældigt_tal_mellem 1 og (SELECT count(*) from tabel)
> SELECT * from tabel limit 1, $tal;

Den er bare ikke så god, for hvis nu f.eks. finder frem til det
tilfældige tal 23 ,så kan jeg ikke være sikker på, at der rent faktisk
findes en række med ID 23. Der kan sagtens være huller i
sekvensen.

--
Jonas Koch Bentzen

http://understroem.dk/

Svenne Krap (26-01-2002)
Kommentar
Fra : Svenne Krap


Dato : 26-01-02 13:25

On Sat, 26 Jan 2002 13:04:10 +0100, Jonas Koch Bentzen
<ingen.emailadresse@eksempel.dk> wrote:

>Den er bare ikke så god, for hvis nu f.eks. finder frem til det
>tilfældige tal 23 ,så kan jeg ikke være sikker på, at der rent faktisk
>findes en række med ID 23. Der kan sagtens være huller i
>sekvensen.

Du tager ingen forudsætninger om ID, du beder systemet om at levere
række nummer 23 (og ikke ID=23).

Den virker altid.

Svenne
--
Mail usenet@krap.dk - svenne@krap.dk - PGP key id : 0xDF484022
ICQ: 5434480 - http://www.krap.dk - http://www.krap.net
PGP Key http://keys.pgp.dk:11371/pks/lookup?op=get&search=0xDF484022

Jonas Koch Bentzen (26-01-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-01-02 13:34

Svenne Krap skrev:

> On Sat, 26 Jan 2002 13:04:10 +0100, Jonas Koch Bentzen
> <ingen.emailadresse@eksempel.dk> wrote:
>
>>Den er bare ikke så god, for hvis nu f.eks. finder frem til det
>>tilfældige tal 23 ,så kan jeg ikke være sikker på, at der rent faktisk
>>findes en række med ID 23. Der kan sagtens være huller i
>>sekvensen.
>
> Du tager ingen forudsætninger om ID, du beder systemet om at levere
> række nummer 23 (og ikke ID=23).

Selvfølgelig. Det var mig, der sov.

--
Jonas Koch Bentzen

http://understroem.dk/

Svenne Krap (26-01-2002)
Kommentar
Fra : Svenne Krap


Dato : 26-01-02 13:22

On Sat, 26 Jan 2002 12:33:16 +0100, Mads Lie Jensen
<mads@gartneriet.dk> wrote:

>On Sat, 26 Jan 2002 12:17:45 +0100, Jonas Koch Bentzen
><ingen.emailadresse@eksempel.dk> wrote:
>
>>Findes der en "order by rand()"-lignende funktion i PostgreSQL? "Order
>>by random()" virker tilsyneladende, men eftersom random() kun returnerer
>>et tilfældigt tal mellem 0 og 1, virker det lidt hack-agtigt at bruge
>>det.
>>
>>Den måde, jeg har gjort det på nu, er at vælge alle ID'erne fra
>>databasen, finde ét af dem med PHP-funktionen array_rand() og så vælge
>>rækken hvor ID'et er det, der kom ud af array_rand(). Er det måden at
>>gøre det på, eller...?
>
>For en lille uges tid siden kørte diskussionen om det samme bare i
>mySQL.
>Dengang kom en løsning ala:
>
>$tal=find_tilfældigt_tal_mellem 1 og (SELECT count(*) from tabel)
>SELECT * from tabel limit 1, $tal;

Her hedder det dog

select * from tabel limit 1 offset $tal

Svenne
--
Mail usenet@krap.dk - svenne@krap.dk - PGP key id : 0xDF484022
ICQ: 5434480 - http://www.krap.dk - http://www.krap.net
PGP Key http://keys.pgp.dk:11371/pks/lookup?op=get&search=0xDF484022

Mads Lie Jensen (26-01-2002)
Kommentar
Fra : Mads Lie Jensen


Dato : 26-01-02 23:35

On Sat, 26 Jan 2002 13:22:10 +0100, Svenne Krap <usenet@krap.dk> wrote:

>>$tal=find_tilfældigt_tal_mellem 1 og (SELECT count(*) from tabel)
>>SELECT * from tabel limit 1, $tal;
>
>Her hedder det dog
>
>select * from tabel limit 1 offset $tal

Ja, sørme så... og her havde jeg endda slået det op i manualen for at
være sikker på rækkefølgen af antal og offset...

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Directory Opus - nu også til windows - http://www.gpsoft.com.au

Jonas Koch Bentzen (26-01-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-01-02 13:42

Mads Lie Jensen skrev:
>
> $tal=find_tilfældigt_tal_mellem 1 og (SELECT count(*) from tabel)
> SELECT * from tabel limit 1, $tal;

Faktisk skal man trække én fra $tal, fordi OFFSET tæller fra 0. Hvis nu
SELECT COUNT(*) FROM tabel giver tallet 5 og det tilfældigt udvalgte tal
mellem 1 og 5 er 5, så vil vi forsøge at hente række nr. 5, og det går
ikke, for den sidste række er række 4, hvis man tæller fra 0.

--
Jonas Koch Bentzen

http://understroem.dk/

Svenne Krap (26-01-2002)
Kommentar
Fra : Svenne Krap


Dato : 26-01-02 13:59

On Sat, 26 Jan 2002 13:41:59 +0100, Jonas Koch Bentzen
<ingen.emailadresse@eksempel.dk> wrote:

>Faktisk skal man trække én fra $tal, fordi OFFSET tæller fra 0. Hvis nu
>SELECT COUNT(*) FROM tabel giver tallet 5 og det tilfældigt udvalgte tal
>mellem 1 og 5 er 5, så vil vi forsøge at hente række nr. 5, og det går
>ikke, for den sidste række er række 4, hvis man tæller fra 0.

Detalje, men skarpt observeret (det er jeg ikke i stand til med mine
tømrer inde i bylden :)

Svenne
--
Mail usenet@krap.dk - svenne@krap.dk - PGP key id : 0xDF484022
ICQ: 5434480 - http://www.krap.dk - http://www.krap.net
PGP Key http://keys.pgp.dk:11371/pks/lookup?op=get&search=0xDF484022

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste