0

我有一个名为t_home_feature以下列的表:id, type, sort_order. 然后我执行了以下 MySQL 语句:

INSERT INTO t_home_feature (SELECT news_id, 'news', ( SELECT max(sort_order) + 1 FROM t_home_feature ) FROM t_news )

然后我做了 aSELECT * FROM t_home_feature但是所有行的 sort_order 的值等于t_home_feature插入语句之前的行数,而不是像previous row + 1.

如何修改我的插入查询以实现previous row + 1输出?

4

2 回答 2

1

您可以将 sort_order 转换为 auto_increment 字段,这意味着数据库将自动递增它,您无需在插入时引用它。这必须是键,但不是主键。例如,这里有一个例子:

http://forums.mysql.com/read.php?22,264498,264967#msg-264967

该链接有一个解决方法的示例:

create table ai (
    id int auto_increment not null,
    xx varchar(9),
    key(id),
    primary key (xx));
于 2012-11-28T21:23:20.357 回答
1

您可能必须对局部变量做一些花哨的事情。也许是这样的:

SELECT COUNT(1) INTO @maxval FROM t_home_feature;
INSERT INTO t_home_feature
SELECT news_id, 'news', @maxval:=@maxval+1 FROM t_news ;

无需从表中自动增加任何值。

我以前回答问题的时候也做过这样的事情。以下是我在 DBA StackExchange 中使用局部变量回答的四 (4) 个问题示例:

于 2012-11-28T21:32:53.940 回答