J'ai une table mysql
(scho_id
, school_name
, school_views
).
Je cherchais une requête mysql
pour obtenir rank
des écoles sur la base de school_views
.
J'ai trouvé cette solution sur stackoverflow.
SET @points := -1, @num := 0;
SELECT scho_id
, school_views
, @num := if(@points = school_views, @num, @num + 1) as school_rank
, @points := school_info.school_views as dummy
FROM school_info
ORDER BY school_views desc, scho_id asc;
Cela a résolu mon problème mais je remarque un nouvel opérateur :=
dans cette requête. Je suis curieux de connaître le sens et les usages de cet opérateur.
Dans MySQL, :=
est un opérateur d'affectation:
SELECT @foo := 'bar'; // variable 'foo' now has value 'bar'
return value: 'bar'
tandis que =
est un test d'égalité:
SELECT @foo = 'hi mom'; // does variable 'foo' have the value 'hi mom';
return value: false ('bar' == 'hi mom' -> false)
Notez que vous POUVEZ faire les deux tests d'égalité ET affectation avec des requêtes set
:
SET @foo = 'bar' = 'baz';
ce qui entraînera @foo
à affecter false
, le résultat booléen de 'bar' = 'baz'
. Il s'exécute comme suit:
SET @foo = ('bar' = 'baz');
SET @foo = false;