0

次の文字列を作成しました。

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(a.project_name)like UPPER('%order%')

このwhere句を含む作成したこの文字列を使用する必要があるselect句があります。だから、私は次のものを持っています:l_full_search_clauseがあるプロジェクトから*を選択してください

ただし、もちろん、MYSQLはl_full_search_clauseを変数としてではなく、そのまま読み取ります。条件が可変文字列であることをMYSQLに伝えるにはどうすればよいですか?

このSQLはMYSQLストアドプロシージャに含まれているため、単純なSQLです。このストアドプロシージャをC#、MVC3から呼び出しています。

4

1 に答える 1

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変数の構文を使用する必要があると思います。また、文字列に格納されたクエリを実行するには、 and を使用する必要がPREPAREありEXECUTEます。

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

于 2012-04-16T14:57:45.910 に答える