我的数据库中有两个表21,
2,
'23.5R25 ETADT',
'description, with a comma'
和foo
。多个bar
有一个foo
,并且包含第二列,用于控制具有相同bar
的{{1}}的排序。用于排序的值应该是唯一的,因此表具有唯一约束:
foo
更新一个栏的bar
s排序的最有效方法是什么?例如,如果我有这些数据:
CREATE TABLE bar (
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE foo (
id INT NOT NULL AUTO_INCREMENT,
bar INT,
`order` INT,
PRIMARY KEY (id),
FOREIGN KEY (bar) REFERENCES bar (id),
UNIQUE KEY (bar, order)
);
想要重新排序(1,2,4,3),我现在有以下疑问:
foo
第一个查询是必要的,以防止其他更新的完整性错误。这可以改进吗?
答案 0 :(得分:0)
我唯一能想到的是你应该在一个单独的表/查询中使用你的更新值,使它更通用,并且可以使用多个ID
<强> newQuery 强>
ID newOrder
3 4
4 3
由于完整性限制,您在更新前将order
更新为null。
UPDATE foo SET `order` = NULL WHERE id IN (SELECT ID FROM newQuery);
然后使用JOIN
UPDATE foo AS f
INNER JOIN newQuery AS n ON f.id = n.id
SET f.order = n.newOrder