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