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 )

次に、を実行しましたが、すべての行の sort_order には、 のような値ではなく、insert ステートメントの前SELECT * FROM t_home_featureの行数と等しい値があります。t_home_featureprevious row + 1

previous row + 1挿入クエリを変更して出力を得るにはどうすればよいですか?

4

2 に答える 2

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 ;

テーブルから値を自動インクリメントする必要はありません。

私は以前に質問に答えるときにこのようなことをしました。ローカル変数を使用してDBAStackExchangeで回答した質問の4つの例を次に示します。

于 2012-11-28T21:32:53.940 に答える
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 に答える