我需要定义一个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
来编写ELIF
,END IF;
,然后编写一个新的IF
,但没有想要工作。
当我点击“创建程序”时,除非我在第一个SELECT
下方注释掉所有内容,否则它始终会显示错误。
非常感谢帮助。谢谢。
答案 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。