1

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

例如,假设我有以下字段:display_order、first_name、last_name、date_created。我想说“按姓氏排序并将 display_order 更新为顺序”。

仅供参考,数据库比这些字段要复杂得多,而且设计得非常糟糕,以至于复杂的动态排序需要几十年的时间。也就是说,我们需要提前获取给定报告、交易等的数据,以便直接“SELECT * FROM tbl ORDER BY display_order”工作。

最好的。

4

2 回答 2

2

这是我想用表标题的排序更新序列列时所做的。(通常排序顺序由系列中的真实位置固定,但“持有人”的杂项一次性谈话需要按标题排序,并且每次添加新谈话时都必须更新)。

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

提示这个这个以激发答案......

PS我不知道它是否适用于SQLite,但它适用于MySQL......

于 2012-12-31T15:32:17.933 回答
0

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

于 2011-05-26T17:40:34.133 回答