在mysql中:=运算符是什么意思?

pro*_*hid 18 mysql operators rank colon-equals

我有一个mysql表(scho_id,school_name,school_views).

我正在寻找一个基于的学校的mysql查询.rankschool_views

我在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;
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,但我注意到:=这个查询中有一个新的运算符.我很想知道这个运算符的含义和用法.

Mar*_*c B 29

在MySQL中,:=是一个赋值运算符:

SELECT @foo := 'bar';    // variable 'foo' now has value 'bar'
return value: 'bar'
Run Code Online (Sandbox Code Playgroud)

=是相等测试:

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

请注意,您可以对set查询执行相等性测试和分配:

SET @foo = 'bar' = 'baz';
Run Code Online (Sandbox Code Playgroud)

这将导致@foo被赋值false,布尔结果'bar' = 'baz'.它执行如下:

SET @foo = ('bar' = 'baz');
SET @foo = false;
Run Code Online (Sandbox Code Playgroud)

  • 是的。`set` 中的第一个 `=` 进行赋值。集合查询不能返回任何内容,因此让 `=` 进行相等测试没有多大意义。无法返回该测试的结果。但是,现在这将进行测试和分配:`set @foo = 'bar' = 'baz';`。`@foo` 将分配 `'bar' = 'baz'` 相等测试的布尔结果,例如 false。 (2认同)