组函数的使用无效 - 使用COALESCE的MySQL

时间:2013-06-06 17:03:22

标签: mysql auto-increment coalesce

我想要一个包含用于在网站上生成导航的链接的数据库表。例如,文本“Home”将链接到“http://example.com/home”,文本“Twitter”将链接到Twitter URL等。我还希望能够更改链接的显示顺序,因此order列。我也希望能够编辑链接,这就是我使用auto_incremented id的原因。

现在我希望order是唯一的,所以我的计划是获得order的最大值并添加一个。这是我正在使用的查询,但它将返回:Invalid use of group function

INSERT INTO
  `links`
  (`id`, `order`, `text`, `html_text`, `link`, `html_link`)
VALUES
  (NULL, COALESCE((MAX(`order`) + 1), 1), 'text', 'text (html)', 'url', 'url (html)');

我的表是这样的:

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 ;

如何获得有效查询才能满足我的需求?

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果你想一次性完成,你必须做一个INSERT ... SELECT组合来从数据库中获取值并根据它插入;

INSERT INTO
  `links`
  (`id`, `order`, `text`, `html_text`, `link`, `html_link`)
SELECT
  NULL, COALESCE((MAX(`order`) + 1), 1), 'text', 'text (html)', 'url', 'url (html)'
FROM `links`;

An SQLfiddle to test with