Mysql设置变量ve存储过程

标签 mysql variables stored-procedures

我有一个关于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/

相关文章:

php - MySQL 过程不返回第一行

PHP/SQL - 多表搜索

mysql - 如何加入我的 "clients"和 "messages"表?

php - 如何提取和导入维基百科页面?

arrays - 将多个数组组合/合并为一个

postgresql - 如何在postgres中执行存储过程的字符串结果

MySQL:其中计数(*)= 0

java - 我怎样才能让 friend 停止思考全局并开始思考相对?

javascript - PHP 对某些 ID 的 javascript 函数返回 'weird value'

SQL 服务器 : trying to create view inside a stored procedure