2016-05-04 4 views
2

が含まれています。私はインデックスのリストを取り込み、データベースをフィルタリングするためにvarcharを特定の文字列に設定しようとしています。 I入力123はわずか3私はそれが1 MySQL varcharには、

5を介してを返したいときに、私は

Declare StateList varchar(150); 
Declare States varchar(150); 
set @StateList = State; 
set @States = ''; 

if CONTAINS(@StateList, '1')then set @States := Concat(@States, '1,2,'); 
elseif CONTAINS(@StateList ,'2')then set @States := Concat(@States,'3'); 
elseif CONTAINS(@StateList,'3')then set @States := Concat(@States, '4,5'); 
end if; 
select @StateList,@States; 
を試してみましたが返されたときに

Declare StateList varchar(150); 
Declare States varchar(150); 
set @StateList = State; 
set @States = ''; 

if (@StateList Like '%1%')then set @States := Concat(@States, '1,2'); 
elseif(@StateList Like '%2%')then set @States := Concat(@States,'3'); 
elseif(@StateList Like '%3%')then set @States := Concat(@States, '4,5'); 
end if; 
select @StateList,@States; 

この:問題は、私は次のようなコマンドを使用してみましたがあります

何も返されませんでしたが、私は最初の解決策がうまくいくとは思いましたが、私は混乱しています。

どのような提案も素晴らしいでしょう。 ありがとうございます

+0

MySQLは()関数は、CONTAINS持っていますか? – knagaev

+0

おそらく、それは私が解決策を探している間に出会ったものでした。とにかくそれはMySQLにあるとは思わないが、とにかく試してみた。 –

+0

この質問に関するすべては、[データベースの正規化](http://en.wikipedia.org/wiki/Database_normalization)の問題を示唆しています。スキーマが適切に関係していると確信していますか? – tadman

答えて

1

別途IF'sを使用する必要があります。if,elseifは、そのうちの1つのみが真であることを意味します。このような何かを試してみてください:

if (@StateList Like '%1%')then set @States := Concat(@States, '1,2'); 
end if; 
if(@StateList Like '%2%')then set @States := Concat(@States,'3'); 
end if; 
if(@StateList Like '%3%')then set @States := Concat(@States, '4,5'); 
end if; 
+0

そうです!私は、私がやったこと、最初の人が結果を返さなかったという事実が私を捨てたという事実を私が見ていないと信じることができます。助けてくれてありがとう! –

0

私はしかし、私はその結果を思ったんだけど、IFSは分離されるべきであると@sagiに同意して「3」とない「1,2」です。たぶん、あなたはので、コードがなりますhttp://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_instr この機能を試すことができます。

if (INSTR(@StateList, '1') > 0)then set @States := Concat(@States, '1,2'); 
end if; 
... 
+0

ええ@サギのソリューションは実際には動作しますが、私もこれで混乱していましたので、私はそれがelseifであることが問題ではないと仮定しました –