带有IF语句的MySQL存储过程

时间:2014-12-03 17:02:46

标签: mysql stored-procedures

我需要定义一个mysql存储过程,如果你传递一个参数,在select查询中使用它,如果没有,那么它就不会。

这就是我所拥有的,而且它不起作用:

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

我还试过而不是ELSE IF来编写ELIFEND IF;,然后编写一个新的IF,但没有想要工作。

当我点击“创建程序”时,除非我在第一个SELECT下方注释掉所有内容,否则它始终会显示错误。

非常感谢帮助。谢谢。

1 个答案:

答案 0 :(得分: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