如何在一个MySQL查询中根据其他两列为每行设置一个数字?
假设我有一个名为members的表,其结构如下:如何在一个MySQL查询中根据其他两列为每行设置一个数字?,mysql,Mysql,假设我有一个名为members的表,其结构如下: member_id, col1, col2, number 现在,如果我运行此查询: SELECT @rownum:=@rownum+1 number, member_id FROM members, (SELECT @rownum:=0) r ORDER BY col1 DESC, col2 DESC 我每行都有一个数字。是否可以将此编号分配给每行的列编号 例如,如果表中包含此数据: 1 1000 1.2 0 2 8700 1.1 0 3
member_id, col1, col2, number
现在,如果我运行此查询:
SELECT @rownum:=@rownum+1 number, member_id
FROM members, (SELECT @rownum:=0) r ORDER BY col1 DESC, col2 DESC
我每行都有一个数字。是否可以将此编号分配给每行的列编号
例如,如果表中包含此数据:
1 1000 1.2 0
2 8700 1.1 0
3 1000 1.1 0
第一行数字列应设置为2,第二行设置为1,第三行设置为3。您可以使用临时表存储值,并通过联接从中更新
/* Store query result in a temporary table */
CREATE TEMPORARY TABLE ranks AS
SELECT @rownum:=@rownum+1 number, member_id FROM members, (SELECT @rownum:=0) r ORDER BY col1 DESC, col2 DESC;
/* And join against it to update your members.number column */
UPDATE
members
JOIN ranks ON members.member_id = ranks.member_id
SET members.number = ranks.number;
DROP TABLE ranks;
实际上,通过我刚才的测试,我可以在没有临时表的情况下完成这项工作。我不认为MySQL会允许从子查询更新同一个表,但显然,相关子查询是允许的
UPDATE
members
/* JOIN against a subquery which returns the rank values */
JOIN (
SELECT @rownum:=@rownum+1 number, member_id
FROM members, (SELECT @rownum:=0) r
ORDER BY col1 DESC, col2 DESC
) ranks ON members.member_id = ranks.member_id
/* And set the number column to the rank */
SET members.number = ranks.number;
你可以试试这个
update members A
INNER JOIN
(
SELECT @rownum:=@rownum+1 number, member_id
FROM members, (SELECT @rownum:=0) r
ORDER BY col1 DESC, col2 DESC
) B ON A.member_id = B.member_id
SET A.number = B.number;