我有一个名为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 )
然后我做了一个SELECT * FROM t_home_feature
但是所有行的sort_order的值都等于insert语句之前t_home_feature
中的行数,而不是像{{1}这样的值}。
如何修改插入查询以实现previous row + 1
输出?
答案 0 :(得分: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));
答案 1 :(得分: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)个问题示例: