2014-12-03 3 views
1

매개 변수를 전달하는 경우 select 쿼리에서 사용하고 그렇지 않으면 매개 변수를 사용하지 않는 mysql 저장 프로 시저를 정의해야합니다.IF 문을 사용하는 MySQL 스토어 절차

여기에 내가 무엇을, 그리고 제대로 동작하지 않습니다 :

IF (selected_category IS NULL) then 

SELECT i.id, i.name, i.summary, i.description, i.location, c.name AS 'category_name' 
FROM items i, categories c WHERE i.category_id = c.id; 

ELSE IF (selected_category IS NOT NULL) then 

SELECT i.id, i.name, i.summary, i.description, i.location, c.name AS 'category_name' 
FROM items i, categories c WHERE i.category_id = c.id AND c.name LIKE selected_category; 

END IF 

나는 또한 ELIF, END IF;를 작성하는 대신 ELSE IF의 시도 한 다음 새 IF을하지만 아무것도 작동하고 싶어.

프로 시저 만들기를 클릭하면 첫 번째 SELECT 아래의 모든 내용을 주석 처리하지 않으면 항상 오류가 표시됩니다.

도움을 많이 주시면 감사하겠습니다. 고맙습니다.

답변

0

당신은 하나의 쿼리를 사용할 수 있습니다 보조 노트에

SELECT i.id, i.name, i.summary, i.description, i.location, c.name AS 'category_name' 
FROM items i, categories c 
WHERE i.category_id = c.id 
AND IF(selected_category IS NOT NULL, c.name LIKE CONCAT('%', selected_category,'%'), TRUE); 

을 명시 적으로 대신 암시 적 조인을 사용하십시오.

ps : 저는 정말로 귀하의 질문에 답변하지 않았 음을 알고 있습니다. 방금 대안을 제공했습니다. 내 생각에 방금 ELSEIF 성명을 놓친 것 같습니다. ELSE IF을 사용 중이며 ELIF을 시도했지만 apparently not the correct syntax입니다.

+0

그것은 프로 시저를 받아들이고 생성했지만, 프로 시저를 호출하면 항상 "MySQL은 빈 결과 집합 (예 : 0 행)을 반환합니다."를 반환합니다. –

+0

같은 성명을 사용하여 조정해야 할 수도 있습니다 (편집 참조). – Sebas

관련 문제