2012-04-16 59 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(a.project_name)像UPPER('%訂單%')

我有一個select子句,我需要使用這個字符串,我已經創建了包含此where子句。所以,我有以下幾點: SELECT * FROM項目 其中l_full_search_clause

但是,當然,MYSQL讀l_full_search_clause,而不要爲一個變量。我如何告訴MYSQL該條件是一個變量字符串?

這個SQL是在MySQL存儲過程..所以它只是普通的SQL ..我打電話從C#這個存儲過程,MVC3

+0

你想要解決這個問題的語言是什麼?你想在MySQL的解決方案?或者您是否將您的語句從其他環境(如PHP)提供給MySQL? – 2012-04-16 14:56:06

回答

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。感謝上述,這是有道理的,但是,我的問題是它的存儲過程。我如何使用存儲的特效來做到這一點? – 2012-04-17 06:50:13

+0

我寫**的代碼是**,意思是把它放到一個存儲過程中。你嘗試過嗎? – 2012-04-17 06:55:48

+1

好吧,我已經完全按照你的方式完成了它。它的工作原理..非常感謝你 – 2012-04-17 07:13:22

相關問題