Maison > base de données > tutoriel mysql > le corps du texte

Comment sélectionner un sous-ensemble aléatoire puis trier par une autre colonne dans MySQL ?

Linda Hamilton
Libérer: 2024-10-26 06:04:31
original
679 Les gens l'ont consulté

 How to Select a Random Subset and Then Order by Another Column in MySQL?

Sélection et classement aléatoires dans MySQL

Lors de l'interrogation d'une base de données MySQL, il est courant de vouloir sélectionner un sous-ensemble d'enregistrements de manière aléatoire. La clause ORDER BY RAND() peut être utilisée pour y parvenir. Cependant, il est important de prendre en compte l'ordre des opérations lors de la combinaison de cette clause avec d'autres clauses de classement.

Un piège courant se produit lorsque l'on tente de sélectionner un sous-ensemble aléatoire d'enregistrements, puis de trier l'ensemble résultant selon une autre colonne. La requête suivante en est un exemple :

SELECT * FROM users WHERE 1 ORDER BY RAND(), name ASC LIMIT 20
Copier après la connexion

L'intention de cette requête est de sélectionner 20 utilisateurs aléatoires dans la table des utilisateurs, puis de les classer par ordre croissant selon leur colonne de nom. Cependant, cette requête ne produira pas le résultat souhaité.

La raison en est que la clause ORDER BY RAND() introduit un ordre non déterministe. Cela signifie que l'ordre des résultats changera à chaque fois que la requête est exécutée. Par conséquent, la clause ASC du nom suivant ne peut pas être utilisée pour classer les résultats de manière fiable.

Pour classer correctement les résultats, nous devons utiliser une sous-requête. La requête suivante sélectionnera 20 utilisateurs aléatoires, puis les triera par leur colonne de nom :

SELECT * FROM 
(
    SELECT * FROM users ORDER BY RAND() LIMIT 20
) T1
ORDER BY name 
Copier après la connexion

La requête interne sélectionne 20 utilisateurs au hasard et stocke le résultat dans la table temporaire T1. La requête externe sélectionne ensuite toutes les lignes de T1 et les classe par nom.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!