Maison > base de données > tutoriel mysql > Comment récupérer efficacement le classement des utilisateurs à partir d'un tableau de scores non ordonnés en PHP et MySQL ?

Comment récupérer efficacement le classement des utilisateurs à partir d'un tableau de scores non ordonnés en PHP et MySQL ?

Barbara Streisand
Libérer: 2024-11-01 22:44:29
original
469 Les gens l'ont consulté

How to Efficiently Retrieve User Rank from an Unordered Scores Table in PHP and MySQL?

Récupération du classement des utilisateurs à partir d'une table de scores non ordonnés en PHP et MySQL

Dans un scénario où vous disposez d'une table de scores avec des enregistrements non ordonnés, déterminer le rang d'un utilisateur peut être une exigence courante. Bien que parcourir toutes les lignes et les trier par score pour calculer le classement soit une option viable, il existe une approche plus efficace utilisant une instruction SQL.

Solution d'instruction SQL

Pour récupérer le classement d'un utilisateur sans boucle, vous pouvez utiliser la requête SQL suivante :

<code class="sql">SELECT s1.initials, (
  SELECT COUNT(*)
  FROM scores AS s2
  WHERE s2.score > s1.score
)+1 AS rank
FROM scores AS s1</code>
Copier après la connexion

Cette requête utilise une sous-requête pour compter le nombre de lignes dans la table « scores » où le score est supérieur au score actuel. le score de la ligne. Le résultat de cette sous-requête, qui représente le nombre d'utilisateurs avec des scores plus élevés, est ensuite incrémenté de 1 pour déterminer le classement.

Exemple d'utilisation

En supposant un score ' table avec les colonnes suivantes :

  • id (clé primaire)
  • verify_string (string)
  • initiales (string)
  • score (entier )

Pour récupérer le classement d'un utilisateur avec les initiales 'ABC' et un score de 100, exécutez le code PHP suivant :

<code class="php">$query = "SELECT initials, (
  SELECT COUNT(*)
  FROM scores AS s2
  WHERE s2.score > s1.score
)+1 AS rank
FROM scores AS s1
WHERE initials = 'ABC' AND score = 100";
$result = $db->query($query);
$row = $result->fetch_assoc();
echo "Rank: " . $row['rank'];</code>
Copier après la connexion

Ce code affichera le classement de l'utilisateur , qui dans ce cas serait "101 joueurs sur 1000" s'il y avait un total de 1000 enregistrements dans le tableau.

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