J'ai une requête MySQL qui génère des lignes dans un ordre aléatoire.
Chaque ligne a une name
列,有时查询可能会产生重复的行(name
ligne avec la même valeur) - c'est par conception. < /p>
Cependant, il arrive parfois que les requêtes regroupent accidentellement les lignes en double directement dans la sortie.
J'essaie de trouver un moyen de répartir uniformément les lignes avec des noms en double dans la sortie afin que les lignes en double ne soient pas accidentellement regroupées.
Une façon d'y parvenir consiste à modifier la requête MySQL pour inclure des critères de tri supplémentaires afin de garantir que les lignes portant le même nom sont réparties uniformément dans la sortie.
Voici un exemple de requête pour y parvenir :
Cette requête trie d'abord les lignes par nom, puis par une valeur aléatoire générée par la fonction RAND(). Les valeurs aléatoires garantissent que les lignes portant le même nom sont réparties de manière aléatoire dans la sortie, plutôt que regroupées.
Veuillez noter que l'utilisation de la fonction RAND() dans une clause ORDER BY peut être coûteuse en termes de calcul et peut ne pas bien s'adapter aux grandes tables. Si tel est le cas, vous pouvez envisager d'utiliser une fonction déterministe différente (telle qu'un hachage MD5 du nom) pour obtenir des résultats similaires.
Cette requête trie d'abord les lignes par le hachage MD5 du nom puis par une valeur aléatoire générée par la fonction RAND(). Le hachage MD5 garantit que les lignes portant le même nom sont réparties uniformément dans la sortie, tandis que la valeur aléatoire garantit que l'ordre des lignes est aléatoire.