recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment distribuer les lignes en double dans la sortie MySQL ?

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粉805107717P粉805107717471 Il y a quelques jours649

répondre à tous(1)je répondrai

  • P粉311423594

    P粉3114235942023-09-14 09:16:23

    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.

    répondre
    0
  • Annulerrépondre