有效地交换行值

时间:2014-07-16 22:23:12

标签: mysql sql

说我有一个由“group_id”和“group_rank”组成的“用户”表

我有一个包含所有群组及其群组信息的表格,包括ID。

我有一个所有组的所有级别的支持表,键为“group_id”和“sort_id”(sort_id所以我可以上下交换排名。)我没有奢侈的只是指的是排名唯一ID引用键sort_id只有它可以支持的许多值(1到50)

我意识到解决问题的最有效方法是让用户“group_rank”引用排名支持表的唯一ID,但不幸的是我没有那么奢侈,所以它必须引用“sort_id”为基础来自rank / users表的“group_id”。

现在,棘手的部分,我想换掉两个排名的排序位置。我已经通过交换查询(how to update swap values of two rows with single query

有效地完成了这项工作

但是,我想对受影响的所有“用户”也这样做。有没有比使用group_id匹配获取所有用户并通过它们进行处理更简单的方法然后创建2个新查询来更新其单独的新rank_id?

1 个答案:

答案 0 :(得分:0)

谢谢JohnLBevan,我确实在寻找CASE,没想到我真正想要的问题,并且在我脑海中过于复杂。感谢您的帮助。

供参考(未来使用的示例参数);

UPDATE `users` SET `rank_id` = CASE  WHEN `rank_id` = '1' THEN 2 WHEN `rank_id` = '2' THEN 1 ELSE `rank_id` END WHERE `group_id` = '43'