mysql 中的 := 运算符是什么意思?
What does the := operator mean in mysql?
我有一个 mysql
table (scho_id
,school_name
,school_views
)。
我正在寻找 mysql
查询以根据 school_views
获得 rank
所学校。
我在 Whosebug 上找到了这个解决方案。
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
被分配 false
,'bar' = 'baz'
的布尔结果。它执行如下:
SET @foo = ('bar' = 'baz');
SET @foo = false;
我有一个 mysql
table (scho_id
,school_name
,school_views
)。
我正在寻找 mysql
查询以根据 school_views
获得 rank
所学校。
我在 Whosebug 上找到了这个解决方案。
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
被分配 false
,'bar' = 'baz'
的布尔结果。它执行如下:
SET @foo = ('bar' = 'baz');
SET @foo = false;