Har en frågesport där 12 frågor ur en databas slumpvis ska matas fram. Problemet är att det tenderar att dyka upp dubletter lite för ofta för att det ska verka statistiskt sannolikt att slumpgeneratorn fungerar. Börjar alltså med roten:
$sql = "SELECT* FROM tblfragor ".$villkor1." ORDER BY RAND() LIMIT 12";
Finns det något i denna sats som gör att en viss post kommer med oftare än andra? Första posten till exempel?
Hur ser villkoret ut? Saknar du inte ett mellanslag efter SELECT?
Alltså:
$sql = "SELECT * FROM tblfragor ".$villkor1." ORDER BY RAND() LIMIT 12";
Fråga: Hur funkar RAND()? Den behöver inte kopplas till någon viss kolumn eller så för att fungera som det är tänkt? :q Det kan inte vara det som är problemet?
Sedan, det är inte så att ni behöver sätta något seed-värde för att få olika randvärden vid olika körningar?
Men rent allmänt när man använder (godtycklig) slumptalsgenerator i datavärlden så får man s.k. pseudo-slumptal, dvs värden som antingen finns lagrade i en jättetabell eller räknas fram mha någon hemskt krånglig formell som ger (till synes) slumpmässiga värden och som har massor av tal i sig innan den kommit "runt", och börjar skicka ut samma värden på nytt. (Ovetenskapligt uttryckt.)
I de allra flesta fall är det då så att om man ingenting säger kommer slumptalsgeneratorn att börja räkna/slå upp på samma ställe varje gång. Dvs första slumptalet är alltid x, nästa y, nästa z för en viss generator på en viss dator. Genom att ange ett sk "seed" eller slumptalsfrö, (oftast kopplat till systemklockan), så får man den att börja räkna på ett nytt ställe för varje ny körning. Och då vet man inte längre vad "nästa" slumptal är nästa gång man kör. Genom att ange fröet kopplat till tiden från systemklockan, så får man garanterat unika frön varje gång.
Pröva att söka i SQL-manualen efter seed eller rand, om det behövs borde det stå en hänvisning vid rand tycker jag...
281 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2