Ik heb een prijsvraag op mijn website, en iedere twee weken wordt uit de ingezonden antwoorden in de tabel een winnaar gekozen.

Nu is het mij alleen opgevallen dat deze winnaar steeds gekozen wordt uit een van de laatst toegevoegde records. Ik heb nu 3 trekkingen gehad, en daarbij was het als volgt
4e vanaf het eind geteld
2e vanaf het eind geteld
4e vanaf het eind geteld

Ik vraag me dus af of de random functie van MySQL wel zo random is?

ik gebruik deze als volgt
ORDER BY RAND() LIMIT 1
Als dat je Query is dan moet dat gewoon werken en is het toeval dat dat zo is gebeurd.
Ga eens gestructureerd testen: een keer of duizend de query uitvoeren levert een stuk betere resultaat op dan 3x...
Aanvulling: RAND() is overigens geen goed plan, het is een regelrechte aanslag op de performance van de database. Zie dit artikel over het hoe-en-waarom.
Frank schreef op 13.02.2007 18:05
Aanvulling: RAND() is overigens geen goed plan, het is een regelrechte aanslag op de performance van de database. Zie dit artikel over het hoe-en-waarom.


Ik denk dat het voor dit geval niet zoveel uit maakt omdat hij immers 1 x in de 2 weken die Query uitvoerd ;)
Ik heb het ooit eens over de rand() in PHP zelf gehad. Niet een bepaald wetenschappelijke ontdekking, maar misschien wel leuk leesvoer: Topic #16226.
@Thijs: Performance is niet alleen een kwestie van hoevaak je de query uitvoert, maar ook hoeveel records er bij zijn betrokken. Zoals je in het artikel kunt lezen, was in hun test de query bijna een uur bezig om een random resultaat te trekken uit 1 miljoen records. En 1 miljoen is niet veel...

En waarom zou je de database zwaar belasten wanneer dat volkomen overbodig is?
Het random selecteren gaat over niet meer dan een paar honderd records op z'n hoogst. Dus die tijd valt nog te mee, en daarnaast wordt hij in een cronjob uitgevoerd, dus merk ik dat niet.

ik zal wel eens kijken of ik zometeen tijd heb om even een scriptje te schrijven en te testen of het echt random is.
Heb even snel scriptje gemaakt gewoon ID 1 tm 4 in een database gezet en volgende gerunt:

$aantal_1 = 0;
$aantal_2 = 0;
$aantal_3 = 0;
$aantal_4 = 0;

for ($i = 0; $i < 100; $i++)
{
	$query = mysql_query("SELECT * FROM `rand` ORDER BY RAND() LIMIT 1") or die(mysql_error());
	$rand = mysql_fetch_assoc($query);
	
	if($rand['id'] == 1)
	{
		$aantal_1++;
	}
	if($rand['id'] == 2)
	{
		$aantal_2++;
	}
	if($rand['id'] == 3)
	{
		$aantal_3++;
	}
	if($rand['id'] == 4)
	{
		$aantal_4++;
	}
}

echo $aantal_1."% <br />";
echo $aantal_2."% <br />";
echo $aantal_3."% <br />";
echo $aantal_4."% <br />";
de php functie rand geeft volgensmij vaak hoge getallen.. hierdoor kun je dus eerder dezelfde getallen krijgen..
Dit zou dus ook zo kunnen zijn met de MySQL funtie ??

Reageren