1

类似于如何在不违反唯一约束的情况下交换 MySQL 中两行的值?, 但不完全..

我有一张这样的桌子:

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-fields 的值,我只知道id要交换的两行的值。我只想有一个查询。

任何人都可以帮助我,因为我对复杂的 MySQL 查询不是很有经验。

4

1 回答 1

3

在单个查询中没有直接的逻辑。

考虑到你想交换x,y

  1. 您必须先x使用不同的值进行更新z。(这里需要一些逻辑来得出一个非常独特的值)。

  2. 然后更新yx

  3. 然后更新zy

于 2013-06-06T19:07:56.190 回答