Bonjour,
Grosse colle, j'ai besoin d'effectuer un tirage aléatoire sur un base de donnée MySQL en php (symfony2).
La colonne identifiant est de type BIGINT unsigned, pour faire cela, je fais un truc du genre (simplifié) :
Ca fonctionne très bien sauf que j'aimerai que l'espérance mathématique d'être sélectionné soit strictement la même pour chaque tuple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $count = 'select max(id) from table'; $random = rand(0, $count); $result = 'select * from table where id>=$random';
Je ne parle pas du rand() que j'ai mis de cette manière pour illustrer mon procédé, mais de la possibilité que certains tuples soient supprimés de la base : si les tuple d' ID 5 et 6 sont supprimés, le 7 aura ainsi plus de chance d'être tiré que le 4, et c'est ce qui me gène !
Quelle est la meilleur façon de procéder pour ce type de sélection ? (un simple ORDER BY RAND() n'est pas une solution envisageable sur cette table (+300000 entrées).
Partager