mysql
テーブル(scho_id
、school_name
、school_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;
これで問題は解決しましたが、このクエリに新しい演算子:=
が見つかりました。この演算子の意味と用途を知りたいです。
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;