/ 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
[MySQL] RAND() med LIMIT
Fra : Kim Schulz


Dato : 05-01-03 20:05

hejsa
jeg har følgende Query:

SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25


Nu er det så at den laver RAND på hele tabellen og ikke kun de 25 som
den skal hente pga. limit.

Hvordan laver man en RAND på den mængde af billeder som man har i sin
LIMIT?

MVH
Kim Schulz

 
 
Morten Winther (06-01-2003)
Kommentar
Fra : Morten Winther


Dato : 06-01-03 13:46


"Kim Schulz" <kim@schulz.dk> skrev i en meddelelse
news:20030105200441.39b1e495.kim@schulz.dk...

> Nu er det så at den laver RAND på hele tabellen og ikke kun de 25 som
> den skal hente pga. limit.
>
> Hvordan laver man en RAND på den mængde af billeder som man har i sin
> LIMIT?

Det gør du ikke i mysql, men i det sprog du bruger; php, asp C++ whatever.

/ morten
www.megapixel.dk - Dit fotoalbum på nettet!



Kim Schulz (06-01-2003)
Kommentar
Fra : Kim Schulz


Dato : 06-01-03 13:46

[snip]
> Det gør du ikke i mysql, men i det sprog du bruger; php, asp C++
> whatever.

Det vil sige jeg skal læse hele listen af billeder m. data ind i en
liste eller lignende og så køre den igennem...det kan da formodenligt
ikke være rigtigt.

MVH
Kim

Mads Lie Jensen (06-01-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 06-01-03 17:07

On Sun, 5 Jan 2003 20:04:41 +0100, Kim Schulz <kim@schulz.dk> wrote:

>hejsa
>jeg har følgende Query:
>
>SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25
>
>
>Nu er det så at den laver RAND på hele tabellen og ikke kun de 25 som
>den skal hente pga. limit.
>
>Hvordan laver man en RAND på den mængde af billeder som man har i sin
>LIMIT?

En

SELECT [felterliste], RAND() AS tilfaeldig ORDER BY tilfaeldig LIMIT
$lowlim, 25;

kan vel gøre det?

(eller, det kan den så nok ikke alligevel, da din version vil hente 25
tilfældige billeder, min version vil bare sortere 25 billeder
tilfældigt...)

Men det kommer jo så an på om du vil hente 25 tilfældige billeder eller
om du bare er ude på at sortere de 25 billeder du henter, tilfældigt.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Lær af andres fejl
- du lever alligevel ikke længe nok til selv at prøve dem alle.

Kim Schulz (06-01-2003)
Kommentar
Fra : Kim Schulz


Dato : 06-01-03 19:10

[snip]

> Men det kommer jo så an på om du vil hente 25 tilfældige billeder
> eller om du bare er ude på at sortere de 25 billeder du henter,
> tilfældigt.
>

Det var det sidste jeg ønskede, men det første jeg havde Jeg ser om
det er min løsning.

MVH
Kim

Kim Schulz (06-01-2003)
Kommentar
Fra : Kim Schulz


Dato : 06-01-03 19:17

On Mon, 6 Jan 2003 19:10:27 +0100
Kim Schulz <kim@schulz.dk> wrote:
> [snip]
>
> > Men det kommer jo så an på om du vil hente 25 tilfældige billeder
> > eller om du bare er ude på at sortere de 25 billeder du henter,
> > tilfældigt.
> >
>
> Det var det sidste jeg ønskede, men det første jeg havde Jeg ser
> om det er min løsning.

Det virker så desværre bare ikke som forventet.

jeg har

SELECT Artist, Image, Email, Link, RAND() AS random
   ORDER BY random
   LIMIT $lowlimit,25


det giver 25 forskellige billeder fra hele tabellen og ikke bare de
samme 25 billeder sorteret tilfældigt.


Jimmy (06-01-2003)
Kommentar
Fra : Jimmy


Dato : 06-01-03 21:19


"Kim Schulz" <kim@schulz.dk> wrote in message
news:20030105200441.39b1e495.kim@schulz.dk...
> hejsa
> jeg har følgende Query:
>
> SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25
>
>
> Nu er det så at den laver RAND på hele tabellen og ikke kun de 25 som
> den skal hente pga. limit.
>
> Hvordan laver man en RAND på den mængde af billeder som man har i sin
> LIMIT?

Jeg tror ikke LIMIT er løsningen.
Kan du ikke bruge en WHERE?

Mvh
Jimmy



Jesper Brunholm (07-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 07-01-03 16:03

Kim Schulz wrote:
> hejsa
> jeg har følgende Query:
>
> SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25

du må kunne bruge group_by eller having... til noget i den sammenhæng,
hvis jeg har læst min MySQL-bog rigtigt

mvh

Jesper Brunholm


Jimmy (07-01-2003)
Kommentar
Fra : Jimmy


Dato : 07-01-03 17:54


"Jesper Brunholm" <nospam@brunholm-scharff.dk> wrote in message
news:3e1aec06@news.wineasy.se...
> Kim Schulz wrote:
> > hejsa
> > jeg har følgende Query:
> >
> > SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25
>
> du må kunne bruge group_by eller having... til noget i den sammenhæng,
> hvis jeg har læst min MySQL-bog rigtigt

Hvordan det?
Prøv at komme med et eksempel.

Som jeg har læst indlægget ønsker manden et tilfældigt billede blandt
$lowlim - f.eks. 1 - og 25
Det vil sige, at han ønsker eet tilfældigt billede blandt disse 25.
Der er flere end 25 i basen.

LIMIT er klart en forkert tilgang - Den begrænser blot hvor mange af de
samlede der vises.
Den bruges til paging.

Jeg foreslår en WHERE.
De 25 eller noget billeder der skal RAND på skal så først markeres vha. en
ekstra kolonne.
Hvis vi forestiller os, at han har alle sine billeder i sin DB og nogen af
dem er til toplogo og nogen til bundbar.
Toplogoer skal så have en variabel/ENUM/CHAR osv som markerer at disse er
toplogoer og så fremdeles.

SÅ kan han få vist et tilfældigt billede af de x relevante i DB.

Jeg gætter naturligvis helt vildt på hans formål, da jeg ikke kan se ideen i
det oprindelige indlæg.
Det ville hjælpe meget, hvis Kim forklarede, hvad han præcis skulle bruge
det til og hvilke typer billeder der ligger i hans tabel.

Mvh
Jimmy



Jesper Brunholm (07-01-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 07-01-03 19:58

Jimmy wrote:
> "Jesper Brunholm" <nospam@brunholm-scharff.dk> wrote in message
> news:3e1aec06@news.wineasy.se...
>
>>Kim Schulz wrote:
>>
>>>hejsa
>>>jeg har følgende Query:
>>>
>>>SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25
>>
>>du må kunne bruge group_by eller having... til noget i den sammenhæng,
>>hvis jeg har læst min MySQL-bog rigtigt

> Hvordan det?
> Prøv at komme med et eksempel.
>
> Som jeg har læst indlægget ønsker manden et tilfældigt billede blandt
> $lowlim - f.eks. 1 - og 25
> Det vil sige, at han ønsker eet tilfældigt billede blandt disse 25.
> Der er flere end 25 i basen.

Jeg havde læst det lige modsat - jeg må ha været for træt, for jeg kan
da godt se at du har ret

> Jeg foreslår en WHERE.

Det tror jeg er helt rigtigt, så jeg beklager mit "vildskud"

mvh

Jesper Brunholm


Kim Schulz (07-01-2003)
Kommentar
Fra : Kim Schulz


Dato : 07-01-03 19:00

[snip]
> Jeg gætter naturligvis helt vildt på hans formål, da jeg ikke kan se
> ideen i det oprindelige indlæg.
> Det ville hjælpe meget, hvis Kim forklarede, hvad han præcis skulle
> bruge det til og hvilke typer billeder der ligger i hans tabel.


Det er til et billedarkiv over art-money (www.art-money.dk skal det
bruges på). Da ingen kunstnere skal prioriteres højere end andre og stå
først på siderne, så laves der på hver side (der er flere sider via
limit) random mellem de billeder som er på siden. For at undgå at nogen
altid bliver vist på første side og andre på anden side, så har jeg et
cronjob der en gang om dagen laver RAND på hele tabellen og propper den
tilbage igen i tabellen (så den bliver forskellige fra dag til dag).

Håber det er forklaring nok.

MVH
Kim

Nis Jorgensen (08-01-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 08-01-03 12:48

On Sun, 5 Jan 2003 20:04:41 +0100, Kim Schulz <kim@schulz.dk> wrote:

>hejsa
>jeg har følgende Query:
>
>SELECT * FROM images ORDER BY RAND() LIMIT $lowlim,25

Her er mit bud. Bemærk at det bliver lidt simplere hvis du bruger en
database der understoetter subselects.

SELECT i1.felt1, i1.felt2, ...
FROM images i1, images i2
WHERE i2.id <= i1.id
GROUP BY i1.felt1, i1.felt2, ...
HAVING count(i2.id) BETWEEN $lowlim AND $lowlim + 25 - 1
ORDER BY RAND()

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Jimmy (08-01-2003)
Kommentar
Fra : Jimmy


Dato : 08-01-03 14:44


"Nis Jorgensen" <nis@dkik.dk> wrote in message
news:4n3o1v4smigifrec9ro6t2h8hdhpf7a2k3@4ax.com...
> On Sun, 5 Jan 2003 20:04:41 +0100, Kim Schulz <kim@schulz.dk> wrote:
>
> SELECT i1.felt1, i1.felt2, ...
> FROM images i1, images i2
> WHERE i2.id <= i1.id
> GROUP BY i1.felt1, i1.felt2, ...
> HAVING count(i2.id) BETWEEN $lowlim AND $lowlim + 25 - 1
> ORDER BY RAND()


ID er sandsynligvis defineret som AUTO_INCREMENT.
Medmindre jeg har misforstået noget, er ovenstående ikke nogen
hensigtsmæssig løsning, da du vil lave forespørgsler baseret på et nummer,
som du ikke kender.

Det er i øvrigt heller ikke givet, at de billeder, der roteres, ligger lige
efter hinanden i databasen, hvilket ville gøre, at løsningen ikke ville
fungere.

Overser jeg noget?

Mvh
JImmy



Nis Jorgensen (09-01-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 09-01-03 18:42

On Wed, 8 Jan 2003 14:43:34 +0100, "Jimmy" <spoerg@efter.den> wrote:

>
>"Nis Jorgensen" <nis@dkik.dk> wrote in message
>news:4n3o1v4smigifrec9ro6t2h8hdhpf7a2k3@4ax.com...
>> On Sun, 5 Jan 2003 20:04:41 +0100, Kim Schulz <kim@schulz.dk> wrote:
>>
>> SELECT i1.felt1, i1.felt2, ...
>> FROM images i1, images i2
>> WHERE i2.id <= i1.id
>> GROUP BY i1.felt1, i1.felt2, ...
>> HAVING count(i2.id) BETWEEN $lowlim AND $lowlim + 25 - 1
>> ORDER BY RAND()
>
>
>ID er sandsynligvis defineret som AUTO_INCREMENT.
>Medmindre jeg har misforstået noget, er ovenstående ikke nogen
>hensigtsmæssig løsning, da du vil lave forespørgsler baseret på et nummer,
>som du ikke kender.

Jeg baserer netop ikke kriterierne paa ID, men paa COUNT(i2.id) WHERE
i2.id <= i1.id - altsaa "Antal raekker med mindre ID end denne"

>Det er i øvrigt heller ikke givet, at de billeder, der roteres, ligger lige
>efter hinanden i databasen, hvilket ville gøre, at løsningen ikke ville
>fungere.

ID var en kolonne jeg opfandt til lejligheden - idet der jo skulle
bruges et eller andet at sortere efter. Ovenstaaende er aekvivalent
til at tage hele listen, sortere efter ID, tage de 25 raekker
startende ved $lowlim, og randomisere dem. Hvis der skal sorteres
efter noget andet end ID, skiftes WHERE-klausen bare ud.

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Jimmy (09-01-2003)
Kommentar
Fra : Jimmy


Dato : 09-01-03 23:03


"Nis Jorgensen" <nis@dkik.dk> wrote in message
news:qjcr1v43dsb7digrh1qp3f44f520rp1b5t@4ax.com...
> On Wed, 8 Jan 2003 14:43:34 +0100, "Jimmy" <spoerg@efter.den> wrote:
>
> >
> >"Nis Jorgensen" <nis@dkik.dk> wrote in message
> >news:4n3o1v4smigifrec9ro6t2h8hdhpf7a2k3@4ax.com...
> >> On Sun, 5 Jan 2003 20:04:41 +0100, Kim Schulz <kim@schulz.dk> wrote:
> >>
> >> SELECT i1.felt1, i1.felt2, ...
> >> FROM images i1, images i2
> >> WHERE i2.id <= i1.id
> >> GROUP BY i1.felt1, i1.felt2, ...
> >> HAVING count(i2.id) BETWEEN $lowlim AND $lowlim + 25 - 1
> >> ORDER BY RAND()
> >
> >
> >ID er sandsynligvis defineret som AUTO_INCREMENT.
> >Medmindre jeg har misforstået noget, er ovenstående ikke nogen
> >hensigtsmæssig løsning, da du vil lave forespørgsler baseret på et
nummer,
> >som du ikke kender.
>
> Jeg baserer netop ikke kriterierne paa ID, men paa COUNT(i2.id) WHERE
> i2.id <= i1.id - altsaa "Antal raekker med mindre ID end denne"

Ahh nu følger jeg dig.
Det bliver spændende at se, om det virker for Kim, hvis han da stadig følger
med.

Mvh
Jimmy



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste