Implémenter le classement dans MySQL : une alternative à l'utilisation de variables
MySQL lui-même ne fournit pas de fonction RANK comparable aux requêtes SQL standard ANSI. Cependant, il existe des alternatives à l'utilisation de variables pour obtenir des fonctionnalités similaires.
Ce qui suit est un exemple de requête MySQL :
SELECT first_name, age, gender, @curRank := @curRank + 1 AS rank FROM person p, (SELECT @curRank := 0) r ORDER BY age;
Cette requête utilise la variable de classement @curRank
, qui est initialisée à zéro à l'aide de la sous-requête (SELECT @curRank := 0)
. Au fur et à mesure que chaque ligne du tableau person
est traitée, la variable @curRank
est incrémentée de 1, créant un mécanisme de classement basé sur le critère de tri spécifié (dans ce cas, l'âge).
Pour illustrer cela, appliquons cette méthode à un exemple de person
tableau :
CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1)); INSERT INTO person VALUES (1, 'Bob', 25, 'M'); INSERT INTO person VALUES (2, 'Jane', 20, 'F'); INSERT INTO person VALUES (3, 'Jack', 30, 'M'); INSERT INTO person VALUES (4, 'Bill', 32, 'M'); INSERT INTO person VALUES (5, 'Nick', 22, 'M'); INSERT INTO person VALUES (6, 'Kathy', 18, 'F'); INSERT INTO person VALUES (7, 'Steve', 36, 'M'); INSERT INTO person VALUES (8, 'Anne', 25, 'F');
Exécuter la requête :
SELECT first_name, age, gender, @curRank := @curRank + 1 AS rank FROM person p, (SELECT @curRank := 0) r ORDER BY age;
produira les résultats suivants :
<code>+------------+------+--------+------+ | first_name | age | gender | rank | +------------+------+--------+------+ | Kathy | 18 | F | 1 | | Jane | 20 | F | 2 | | Nick | 22 | M | 3 | | Bob | 25 | M | 4 | | Anne | 25 | F | 5 | | Jack | 30 | M | 6 | | Bill | 32 | M | 7 | | Steve | 36 | M | 8 | +------------+------+--------+------+ 8 rows in set (0.02 sec)</code>
Apparemment, cette requête attribue avec succès un classement aux individus dans chaque partition de genre, similaire aux résultats attendus de la requête SQL standard ANSI. Cette technique fournit une solution de contournement pratique lorsque MySQL ne dispose pas d'une fonction RANK dédiée.
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!