使用mysql自动填充排序顺序

时间:2012-11-28 21:18:44

标签: mysql

我有一个名为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输出?

2 个答案:

答案 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)个问题示例: