使用SQL根据结果排序操作中的位置批量更新列



我的大脑今天早上决定停止工作。我需要一个MySQL和SQLite兼容的查询,它将允许我根据另一列的排序来批量更新表的"display_order"列。

例如,假设我有以下字段:display_order、first_name、last_name、date_created。我想说"按last_name排序并更新display_order以使其连续"。

仅供参考,数据库比那些字段要复杂得多,而且设计得太差,以至于复杂的排序需要几十年的时间。也就是说,我们需要提前为给定的报告、事务等按顺序获取数据,这样直接的"SELECT*FROM tbl order BY display_order"就可以工作了。

最好。

以下是我想要用表标题的排序更新序列列时所做的操作。(通常排序顺序由系列中的真实位置决定,但一组"持有者"的杂项一次性谈话需要按标题排序,每次添加新谈话时都必须更新)。

UPDATE resource r
JOIN(
SELECT
    resource.resource_key AS rkey,
    @curRow := @curRow + 1 AS row_number
FROM
    resource,
    (SELECT @curRow := 0) rtemp
WHERE
    grouping_key = 'MMMISC'
ORDER BY
    resource.title
) c ON r.resource_key = c.rkey
SET r.group_sequence = c.row_number

给这个和这个启发答案的帽子提示。。。

附言:我不知道它是否在SQLite中工作,但它在MySQL中工作。。。

我不确定这是否适用于您。创建一个具有AUTO_INCREMENT列"ID"以及其他类似于your_table的列的临时表,并插入结果为"select*from your_table order by last_name"的临时表。然后用temp.ID更新您的_table.display_order列,其中your_table.last_name=temp.last_name.

相关内容

  • 没有找到相关文章

最新更新