2014-12-03 95 views
1

我需要定义一个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 

我也试过,而不是ELSE IF,写ELIFEND 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返回空结果集(即零行)”。 – 2014-12-03 18:12:29

+0

你可能需要调整你喜欢的语句(请参阅编辑) – Sebas 2014-12-03 19:22:41