我正在尝试更新具有以下结构的数据库表:
user_id, group_id, other_data, sequence
user_id
指向包含所有用户数据的用户表,group_id
指向组信息表中的记录。 other_data
并不重要。 sequence
是一个用于确定用户列出顺序的值。例如,如果我从 group_id
1234 中提取每个人,则使用 sequence
对他们进行排序。
当从表中删除用户时,我正在尝试运行更新以更改此顺序。目前,我正在使用一个运行 SELECT 查询的 CFML 脚本,遍历它,然后进行单独的更新。我想做的是在一个查询中写下整个事情。
出现的问题是当用户属于多个组时(通常是这种情况)。这是我目前拥有的:
UPDATE
user_groups_tbl
SET
sequence = sequence - 1
WHERE
group_id IN (SELECT group_id FROM user_groups_tbl WHERE user_id = #URL.user_id#)
AND
sequence > (SELECT sequence FROM user_groups_tbl WHERE user_id = #URL.user_id#);
我可以看出,对于这个查询,序列的 WHERE 不正确;这将提取一些“随机”序列号,尤其是与具有正确 group_id
的记录相关联的序列号。
我不知道我是否已经解释得足够好,希望有人能够看到我在这里试图用这个做什么...如果有人可以帮助解决这个问题,我们将不胜感激。
目前正在 MS SQL 2005 服务器上运行,但最终将移植到 MySQL 引擎上。
最佳答案
t我认为这会得到它:
UPDATE
user_groups_tbl
SET
sequence = sequence - 1
WHERE
group_id IN (SELECT group_id FROM user_groups_tbl
WHERE user_id = #URL.user_id#)
AND
sequence > (SELECT tbl2.sequence FROM user_groups_tbl tbl2
WHERE tbl2.user_id = #URL.user_id#
AND tbl2.group_id = user_groups_tbl.group_id);
我在您的 where 子句的后半部分添加了另一个条件,以限制子查询将返回的 Group_id。这需要添加表别名。
关于mysql - 存储有排序的sql更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667318/