webForumDet fria alternativet

Vad är det för fel?

Databaser & SQL

5 svar · 328 visningar · startad av Poppe25

Medlem sedan apr. 2002255 inlägg
Frågan#1

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?

Medlem sedan juni 200032 967 inlägg
#2

Hur många frågor finns det i tabellen? Ju färre frågor, desto större är sannolikheten.

Medlem sedan apr. 2002255 inlägg
#3

jo tack, he he det har vi räknat på....
men vi har drygt tusen frågor och det dyker upp dubletter lite för ofta...tänker att jag kollar för allt nu

Medlem sedan mars 20034 471 inlägg
#4

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?

Medlem sedan apr. 2002255 inlägg
#5

Mellanslaget är inget problem. Och det verkar inte som man behöver knyta rand till någon kolumn. Eller?

Däremot blir jag nyfiken när du nämner seed-värde. Vad innebär det?

Medlem sedan mars 20034 471 inlägg
#6

Alltså, jag vet inget om RAND-funktionen i SQL.

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
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)