我想要一个包含用于在网站上生成导航的链接的数据库表。例如,文本“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 ;
如何获得有效查询才能满足我的需求?
提前致谢!
答案 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`;