Maison  >  Article  >  base de données  >  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
Barbara Streisandoriginal
2024-11-01 22:44:29386parcourir

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>

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>

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!

Déclaration:
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