2012-04-16 4 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) ('%을 주문 % ')

나는이 절을 포함하는이 문자열을 사용해야하는 select 절이 있습니다. 그래서, 나는 다음과 같습니다 선택 *하고 있지 변수로로 물론 l_full_search_clause

그러나이, MYSQL이 l_full_search_clause 읽어 프로젝트 에서. 어떻게 조건이 가변 문자열인지 MYSQL에 알릴 수 있습니까?

이 SQL은 그래서는 그냥 일반 SQL은 .. 내가 C에서 #이 저장 프로 시저, MVC3

+0

이 문제를 해결하기 위해 어떤 언어를 원하십니까? MySQL에서 솔루션을 원하십니까? 또는 PHP와 같은 다른 환경에서 MySQL에 진술을 제공하고 있습니까? –

답변

1

를 호출하고이 시도에 .. MYSQL 저장 프로 시저에 있습니다

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

좋아, 네가 한대로 해냈어. 그리고 .. 작동 해. 고마워. –

관련 문제