与How to swap values of two rows in MySQL without violating unique constraint?类似,但不完全......
我有一张这样的表:
CREATE TABLE IF NOT EXISTS `links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order` int(11) NOT NULL,
`text` varchar(31) NOT NULL,
`html_text` varchar(63) NOT NULL,
`link` varchar(127) NOT NULL,
`html_link` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `order` (`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
它代表网站导航区域中的链接。例如:主页的链接,联系页面的链接等。我希望能够更改这些链接的顺序,这就是我有order
列的原因。此列的值是唯一的,因此我可以按order
排序。
现在我想交换此有序列表中两个链接的位置,因此我想交换order
的值。但与其他问题不同,我不知道order
- 字段的值,我只知道要交换的两行的id
值。我想只有一个查询。
任何人都可以帮助我,因为我对复杂的MySQL查询不是很有经验。
答案 0 :(得分:3)
在单个查询中没有直接的逻辑。
考虑您要交换x,y
您必须使用不同的值x
更新第一个z
。 (这里需要一些非常独特的逻辑)。
然后将y
更新为x
然后将z
更新为y