【发布时间】:2015-10-29 12:45:28
【问题描述】:
我的数据库中有两个表,foo 和 bar。多个foos 有一个bar,并包含第二列控制foos 与相同bar 的顺序。用于排序的值应该是唯一的,因此该表具有唯一约束:
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)
);
更新foos 的顺序的最有效方法是什么?例如,如果我有这些数据:
id | bar | order
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 1 | 4
并且想要重新排序它们(1、2、4、3),我现在有以下查询:
UPDATE foo SET `order` = NULL WHERE id IN (3, 4);
UPDATE foo SET `order` = 3 WHERE id = 4;
UPDATE foo SET `order` = 4 WHERE id = 3;
第一个查询对于防止其他更新出现完整性错误是必要的。这可以改进吗?
【问题讨论】:
-
澄清一下,您是想在表格中组织数据,还是一般分配新值
-
我不关心表格中的实际顺序,我试图在通过
SELECT ... ORDER BY "order"检索结果时重新排序。 -
使用
order by bar asc, order,您将首先按条形排列数据,然后按顺序排列 -
您可能正在寻找的答案在这里:stackoverflow.com/questions/11207574/…
标签: mysql sql constraints