D H*_*son 5 mysql sql sql-update
这是我的第一个堆栈溢出问题,如果我做错了,请道歉.我避免在问题中使用术语"索引",以免混淆我的问题与数据库索引.这个问题是关于索引表示法 - 指定一系列项目中元素的位置.
我有一个documents与其对应存储的系统paragraphs; 每个都document包含很多paragraphs.该数据存储在MySQL数据库中.
该paragraphs表包含以下字段:
我希望在paragraphs设置为给定段落的索引的表中添加一个新字段,该字段与其所在的文档相关.此查询仅在添加此字段的迁移期间运行一次; 然后我计划在插入段落时填充它.
每个文档中的第一段应该有index = 0.每个文档中的第二段应该有index = 1.
主键:1文档ID:1索引:0
主键:2文档ID:1索引:1
主键:3文档ID:1索引:2
主键:4文档ID:2索引:0
主键:5文档ID:2索引:1
一个显而易见的方法是在每个文档的基础上执行此操作,但这在大型文档数据库中似乎效率低下.
非常感谢您的帮助!大教堂
您可以使用变量来执行此操作(当然,在添加列之后):
alter table paragraphs add index int;
set @d := 0;
set @i := 0;
update paragraphs
set index = (if(@d = document_id, @i := @i + 1,
if(@d := document_id, @i := 1, @i := 1)
)
) - 1 -- to start numbering at 0 rather than 1
order by document_id, primary_key;
Run Code Online (Sandbox Code Playgroud)
注意: index对于列来说这是一个非常糟糕的名称,因为它是一个 SQL 关键字。将该列命名为其他名称,例如paragraph_number。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |