Comment distribuer les lignes en double dans la sortie MySQL ?
P粉805107717
P粉805107717 2023-09-13 15:45:37
0
1
644

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.

P粉805107717
P粉805107717

répondre à tous(1)
P粉311423594

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 :

SELECT * FROM my_table ORDER BY name, RAND();

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.

SELECT * FROM my_table ORDER BY MD5(name), RAND();

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal