2012-04-16 19 views
0

MYSQLでのWHERE句のように文字列を渡す方法:私は以下の文字列を作成している

set l_project_name = concat("UPPER(a.project_name) like UPPER ('%",projectName,"%')"); 
set l_project_type = concat(" OR UPPER(a.project_type) like UPPER('%",projectType,"%')"); 
set l_project_description = concat(" OR UPPER(a.project_description) like UPPER('%",projectDescription,"%')"); 

set l_full_search_clause = concat(l_project_name ,l_project_type, l_project_description); 

文字列の結果:l_full_search_clauseがある:UPPERよう UPPER(a.project_name)( '%をオーダー% ')

私はこのwhere句を含むこの文字列を使用する必要があるselect句があります。だから、私は次のようしている: はl_full_search_clause

プロジェクト から選択*しかし、当然のことながら、MySQLは変数としてではなくとしてl_full_search_clause読み込みます。条件が可変文字列であることをMYSQLにどのように伝えることができますか?

このSQLは、MySQLのストアドプロシージャである..私はC#のがこのストアドプロシージャを呼び出していて、単なるSQL ..だから、MVC3

+0

これを解決するためにどのような言語をお探しですか? MySQLのソリューションをお探しですか?あるいは、あなたはPHPのような他の環境からMySQLにあなたの声明を送っていますか? –

答えて

1

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

SET @query = "SELECT * FROM projects WHERE "; 

SET @l_project_name = CONCAT("a.project_name LIKE '%", projectName, "%'"); 
SET @l_project_type = CONCAT(" OR a.project_type LIKE '%", projectType, "%'"); 
SET @l_project_description = CONCAT(" OR a.project_description LIKE '%", projectDescription, "%'"); 

SET @l_full_search_clause = CONCAT(@l_project_name, @l_project_type, @l_project_description); 

SET @query = CONCAT(@query, @l_full_search_clause); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 

私はあなたがする必要があると考えています変数に@varの構文を使用します。また、文字列に格納されているクエリを実行するには、PREPAREEXECUTEを使用する必要があります。

文字列にUPPERを使用する必要はありません。デフォルトでは、MySQLは大文字と小文字を区別しないで文字列を比較します。フィールドの照合タイプを確認することで確実に確認できます。 ci_は大文字と小文字を区別しません。

+0

私は現在これをストアドプロシージャから実行しています。だから、私はC#コード(MVC3)からパラメータを渡して、このSQLを実行しています。上記のおかげで、それは意味が、私の問題は、ストアドプロシージャです。どのように私は格納procsを使用してこれを行うことができますか? –

+0

私が書いた**コードは**ストアドプロシージャの中に入れるためのものです。そうしたことがありますか? –

+1

さて、あなたと同じようにしました。 –

関連する問題