|
| 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
| |
|
|