2011-10-28 10 views
0

質問はかなり簡単です。私はちょうど私が求めているので、ここでは、 を解決策を見つける* .sqlファイルの内容であることができませんでした:私は、スクリプトを実行したとき、私は固定value.whichする@max_command_idxを期待mysqlスクリプト変数とmax関数

select @max_command_idx=max(command_idx)+1 from command; 
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0); 
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0); 

後続の挿入ステートメントの両方で "同じ"値を代用する必要があることを意味します。しかし、それはしませんでした。それは、それぞれのinsert文に対してmax_command_idxの新しい価値を与えることでした。 なぜですか?どのように私はそれを解決することができますか? ありがとう

+0

は、より良い答えを[こちら] [1]を参照してください。 [1]:http://stackoverflow.com/questions/7992889/mysql-script-variables-and-max-function-2 – rahman

答えて

1

最初の行は、実際にブール条件を選択しているので、@max_command_idxをnullに設定します。したがって、この実行している場合:

select @max_command_idx=max(command_idx)+1 from command; 

をあなたが実際に「それがない場合は、私に0を選択し、@max_command_idxは現在の最大command_idx + 1に等しい場合は、私に1を選択し、@max_command_idxがnullの場合はnull、私を選択する」と言っています。

@max_command_idxがnullなので、ブール結果がヌルなので、それ以降の挿入で@max_command_idxが再初期化されたように見えます。

はこれを試してみてください:

select max(command_idx)+1 into @max_command_idx from command; 
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0); 
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0); 

は、あなたがやりたいなら...

+0

yeaaaaaaaaah、のTaNx不発。 – rahman

+0

重要なアップデート。私のコマンドテーブルは、command_idxカラムにauto_increment属性を持っていました。なぜなら、上記のanserは特別な場合には当てはまりますが、次のような場合には機能しません:1コマンドテーブル自体は空です2別のテーブルで動作しているスクリプトの@max_command_idx(FKとしてcommand_idxを使用) – rahman