Gå til innhold

MySQL - ORDER BY og RAND


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

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.

Skrevet

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

Skrevet

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

Dette vil velge to tilfeldige blandt alle nyhetsartiklene, ikke to blandt de ti nyeste.

Skrevet

My bad. Her er spørringen du leter etter.

 

Juster etter behov =)

 

SELECT * FROM
(
SELECT
	n.*
FROM nodes n
ORDER BY n.ts_created DESC
LIMIT 10
) x
ORDER BY RAND()
LIMIT 2

Skrevet

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

Skrevet

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.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...