Att göra en randomisering är inte värsta grejen. Men det är en sak jag undrar hur jag skall lösa.
Jag har ett antal rader i en tabell, som jag vill plocka ut 6 st slumpmässigt.
Ser en möjlighet, men den kan skapa fel i bland.
Den är så att jag kollar hur många rader det är och sedan slumpar ut 6 st ur det.
Men saken är det slumpas det fram ett nr och så existerar inte det ID:et så kommer de bli fel.
Så på vilket sätt anser ni att jag bäst löser det?
Kanske genom att läsa in alla raders id i en array och sedan slumpa ut i från den eller? :q
Hit me! :OO
SnakesMedlem sedan okt. 2004392 inlägg Tycker det vore säkrare om du körde med arrayn...
// vi säger att arrayn som du har satt ihop heter $array
$arraykey = array_rand($array);
echo $array[$arraykey];
kjellMedlem sedan dec. 1999757 inlägg Bäst vore förmodligen att köra det direkt i frågan
mysql_query("SELECT * FROM tabell ORDER BY RAND() LIMIT 6")
kjell skrev:
Bäst vore förmodligen att köra det direkt i frågan
mysql_query("SELECT * FROM tabell ORDER BY RAND() LIMIT 6")
Var vill du ha den stora blöta julpussen någonstans? :P :f
Löste mitt problem nämnvärt mycket snabbare än de jag påböjade att pluta ihop.. :e
Tack tack, god jul! Ho ho ho... :bire
MatteMedlem sedan aug. 20002 975 inlägg "ORDER BY RAND()" är osäkert då du mycket väl kan få med samma rad flera gånger bland de sex.
Som jag ser det är ditt enda alternativ att spara id i en array, och slumpa utifrån dom.
kjellMedlem sedan dec. 1999757 inlägg Det tror jag inte. Var har du den fått den uppgiften ifrån?
Man kan inte få med samma rad flera gånger...
MatteMedlem sedan aug. 20002 975 inlägg Jag fick precis samma påstående vid ett tillfälle när jag själv föreslog ORDER BY RAND().
Tyckte det lät skumt, och testade det. Och fick verkligen vid några tillfällen samma rader flera gånger.
Försökte göra om samma test nu då jag har bytt till nyare MySQL-version (4.0.2), men lyckades inte upprepa det.
Kanske var det något som fanns i äldre versioner, eller den versionen jag använde då ?
I vilket fall ber jag om ursäkt för att jag påstod något som jag inte kan verifiera, snarare tvärtom :), men när jag testade vid tidigare tillfälle så fick jag verkligen utfallet att samma rad kunde komma upp flera gånger, och har därför därefter aldrig använt "ORDER BY RAND()".
Matte skrev:
Jag fick precis samma påstående vid ett tillfälle när jag själv föreslog ORDER BY RAND().
Tyckte det lät skumt, och testade det. Och fick verkligen vid några tillfällen samma rader flera gånger.
Försökte göra om samma test nu då jag har bytt till nyare MySQL-version (4.0.2), men lyckades inte upprepa det.
Kanske var det något som fanns i äldre versioner, eller den versionen jag använde då ?
I vilket fall ber jag om ursäkt för att jag påstod något som jag inte kan verifiera, snarare tvärtom :), men när jag testade vid tidigare tillfälle så fick jag verkligen utfallet att samma rad kunde komma upp flera gånger, och har därför därefter aldrig använt "ORDER BY RAND()".
He he.. för mig spelar ingen roll om samma rad kommer upp flera gånger.. så länge den inte dyker upp två eller fler gånger på samma gång! :) Vilket det inte gjort hittils! :e
Nåja den tillfredställer mina behov och drar ned på en massa kod..
GOD JUL! :D
Case closed!
kjellMedlem sedan dec. 1999757 inlägg
Fredde Mannen skrev:
.. så länge den inte dyker upp två eller fler gånger på samma gång!
Det ska den inte göra. Däremot kan det naturligtvis bli samma 6 rader nästa gång. Av den anledningen rekommenderas att man inte använder RAND() när man t.ex. vill skicka in ett värde på varje rad som ska vara slumpvis eftersom RAND() startar om varje gång en en ny WHERE-klasul ska exekveras.
Man bör alltså inte använda RAND() som en slumpgenerator och kanske det är detta som någon påpekat tidigare.
MySQL-manualen skrev:
ORDER BY RAND() combined with LIMIT is useful for selecting a random sample of a set of rows:
och det är ju det vi vill i vårt fall.
MySQL-manualen igen skrev:
Note that RAND() in a WHERE clause is re-evaluated every time the WHERE is executed. RAND() is not meant to be a perfect random generator, but instead a fast way to generate ad hoc random numbers that will be portable between platforms for the same MySQL version.
Källa