web-dev-qa-db-fra.com

Que signifie l'opérateur: = dans mysql?

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.

15
prograshid

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;
28
Marc B