mysql - 存储有排序的sql更新表

标签 mysql sql sql-server-2005 sql-update sequences

我正在尝试更新具有以下结构的数据库表:

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/

相关文章:

sql - PostgreSQL Group By A,但仍拉取B字段

mysql - 为什么我的程序不起作用?

Sql Server 系统进程查询

sql-server-2005 - 在 T-SQL 脚本中使用或不使用 "GO"会影响结果吗?

php - SELECT 是同步的还是异步的?

PHP删除表单用于从MySQL数据库中删除数据

php - 如何选择一列具有两个不同属性的行?

php - mysqli、sha1/salt 密码有效性检查

sql - 将日期聚类为期间

SQL 执行计划显示相同输入的不同结果