我有一个关于mysql存储过程和变量的问题;
表名:es_adwords 字段:id # image_source # image_link # computer_id # is_all_pc# image_state # banner_size
我想创建应该搜索 computer_id = {pc_number} 和 image_state = 0 的存储过程。
如果不是,存储过程应该返回等于 is_all_pc = 1。
DELIMITER $$
DROP PROCEDURE IF EXISTS `GetAdwordsBanner` $$
DELIMITER $$
CREATE PROCEDURE `GetAdwordsBanner`(IN compid INT)
BEGIN
SET @result_id := 0;
SELECT @result_id := id FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1;
IF (@result_id != 0) THEN
SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1;
ELSE
SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND is_all_pc = 1 ORDER BY id DESC LIMIT 0,1;
END IF;
END $$
DELIMITER ;
此致...
最佳答案
你的逻辑有问题。我会将其重写为:
DELIMITER $$
CREATE PROCEDURE `GetAdwordsBanner`(IN compid INT)
BEGIN
-- use a local variable instead of a user variable
DECLARE result_count INT;
-- count how many rows are matching
SELECT COUNT(*) INTO result_id FROM es_adwords WHERE image_state = 1 AND computer_id = compid;
-- if there are matches
IF result_count > 0 THEN
-- return the first matching row
SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1;
ELSE
-- return the default one
SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND is_all_pc = 1 ORDER BY id DESC LIMIT 0,1;
END IF;
END $$
DELIMITER ;
这应该有效。
关于Mysql设置变量ve存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25712145/