0

我想要一个带有用于在网站上生成导航的链接的数据库表。例如,文本“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 ;

我怎样才能得到一个有效的查询来做我想做的事?

提前致谢!

4

1 回答 1

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`;

一个用于测试的 SQLfiddle

于 2013-06-06T17:08:00.663 回答