web-dev-qa-db-ja.com

mysqlで:=演算子は何を意味しますか?

mysqlテーブル(scho_idschool_nameschool_views)があります。

school_viewsに基づいて学校のmysqlを取得するrankクエリを探していました。

このソリューションは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;

これで問題は解決しましたが、このクエリに新しい演算子:=が見つかりました。この演算子の意味と用途を知りたいです。

15
prograshid

MySQLでは、:=は代入演算子です:

SELECT @foo := 'bar';    // variable 'foo' now has value 'bar'
return value: 'bar'

=は等価性テストです:

SELECT @foo = 'hi mom'; // does variable 'foo' have the value 'hi mom';
return value: false   ('bar' == 'hi mom' -> false)

等価テストとsetクエリを使用した割り当ての両方を実行できることに注意してください。

SET @foo = 'bar' = 'baz';

これにより、@foo'bar' = 'baz'のブール結果であるfalseが割り当てられます。次のように実行されます。

SET @foo = ('bar' = 'baz');
SET @foo = false;
28
Marc B