DELIMITER //
DROP PROCEDURE IF EXISTS salary_ref//# MySQL returned an empty result set (i.e. zero rows).
# MySQL returned an empty result set (i.e. zero rows).
CREATE PROCEDURE salary_ref(con int(11),IN id varchar(120),maxval int(11),minval int(11) , taxo int(11))
BEGIN
DECLARE s VARCHAR(50);
IF con = 1 THEN
SELECT `i` . * , `taxo`.`id` , `t`.`item_id` AS id, `u`.`name` AS user_name, `t`.`value` AS val
FROM (
`taxonomy` AS taxo
)
JOIN `item_taxo` AS t ON `t`.`taxo_id` = `taxo`.`id`
INNER JOIN `items` AS i ON `i`.`id` = `t`.`item_id`
INNER JOIN `users` AS u ON `u`.`id` = `i`.`created_by`
WHERE `t`.`value`
BETWEEN minval
AND maxval
AND `t`.`taxo_id` = taxo
AND `i`.`parent_tag_id` in (id);
ELSE
SELECT `i` . * , `taxo`.`id` , `t`.`item_id` AS id, `u`.`name` AS user_name, `t`.`value` AS val
FROM (
`taxonomy` AS taxo
)
JOIN `item_taxo` AS t ON `t`.`taxo_id` = `taxo`.`id`
INNER JOIN `items` AS i ON `i`.`id` = `t`.`item_id`
INNER JOIN `users` AS u ON `u`.`id` = `i`.`created_by`
WHERE `t`.`value`
BETWEEN minval
AND maxval
AND `t`.`taxo_id` = taxo
AND `i`.`parent_tag_id` in (id);
END IF;
END;
//# MySQL returned an empty result set (i.e. zero rows).
DELIMITER ;
//调用那个
调用salary_ref(2,“\'36 \',\'50 \',\'57 \'”,17000000,0,7)
这对我不起作用。
答案 0 :(得分:1)
以下更改可以解决问题。
更改1 :
我建议不要对存储过程使用相同的参数名来表示表的列名
除非你正确处理它们,否则会出现标识符冲突,但似乎并不存在。
更改程序签名如下:
CREATE PROCEDURE salary_ref(
_con int(11), IN csv_id_values varchar(120),
_maxval int(11), _minval int(11), _taxo int(11)
)
更改2 :
您正尝试为id
字段传递逗号分隔值,以便在where
子句中使用
但是使用转义字符不会解决您的问题,这不是使用输入值的正确方法。
call salary_ref( 2, '36,50,57', 17000000, 0, 7 )
CSV值'36,50,57'
可以用作where
子句
请参阅下面的建议更改。
更改3 :
您可以在FIND_IN_SET
子句中使用IN
代替WHERE
而不是 WHERE `t`.`value` BETWEEN _minval AND _maxval
AND `t`.`taxo_id` = _taxo
AND FIND_iN_SET( `i`.`parent_tag_id`, csv_id_values );
。
IF con
并且,我认为您的程序正文不完整。您的ELSE
和SELECT
使用了相同的{{1}}声明。除非你改变它,否则它是多余的。