Gå til innhold

MySQL - ORDER BY og RAND


Anbefalte innlegg

Hei. Sitter nå med en problemstilling.

 

Slik ser spørringen ut:

$db->query("SELECT * FROM articles WHERE article_newspage=true ORDER BY article_timestamp LIMIT 10");

 

Av disse 10, ønsker jeg å plukke ut 2.

 

Finnes det noen genial måte å gjøre dette på? For eksempel med MySQL sin RAND() funksjon?

 

Eller må jeg legge hver row i en array og plukke ut 2 tilfeldige med php?

 

-Even

Lenke til kommentar
Videoannonse
Annonse

Det første jeg tenkte var

SELECT * FROM (SELECT * FROM articles WHERE article_newspage=true ORDER BY article_timestamp LIMIT 10) ORDER BY RAND LIMIT 2

Vet ikke om slike underutvalg vil fungere i PHP, men i hodet mitt så skal denne spørringen gi to tilfeldige artikler valgt ut fra de ti sist oppdaterte/skrevne.

Lenke til kommentar

Du kan jo legge det i en array

 

$randomA = array();

$count = 0;

while($result = mysql_fetch_array($query)){

$randomA[$count] = $result[];

$count++;

 

}

$randomN1 = rand(0,9);

$randomN2 = rand(0,9);

 

så bare henter du ut informasjonen fra $randomA[$randomN1]['title'] f.eks

Mener det skal fungere :)

Du kan også evt. sette inn en sjekk for at tallene ikke er like slik at du ikke plutselig får 2 like og random artikler

Lenke til kommentar

Hei på deg Even! Du er klar over at det er et eget forum for databaser her? Dette er forresten Thomas. Booya.

 

Forresten forresten, det frarådes å bruke RAND() funksjonen i MySQL fordi den er forferdelig treg, den beste løsningen er å hente ut de 10 siste og bruke PHP til å velge ut 2 av de 10 siste. Går mye fortere :)

Lenke til kommentar

Forresten forresten, det frarådes å bruke RAND() funksjonen i MySQL fordi den er forferdelig treg, den beste løsningen er å hente ut de 10 siste og bruke PHP til å velge ut 2 av de 10 siste. Går mye fortere :)

 

Jeg vil være enig med deg at ORDER BY RAND på en stor tabell vil være tregt da MYSQL bruker en midlertidig tabell for å gjøre det tilfeldige utvalget. Hvis du derimot kun gjør et utvalg på en midlertidig tabell på ti rader så vil ikke dette være nevneværdig tregere enn å hente ut ti rader og velge to tilfeldige i PHP.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...