Count()无法正常工作Mysql PROCEDURE

时间:2016-03-16 07:17:35

标签: mysql

我创建了一个带2个参数的程序并检查计数。 但是当我传递""空白值时,它仍会返回1个计数。 没有得到它为什么这样工作。 感谢下面的帮助是我的程序

DELIMITER $$

CREATE DEFINER=`dadclient`@`123.63.249.169` PROCEDURE `checkInOut`(IN grid varchar(50),OUT count INT)
begin 

select count(GRIDID) into count  from GRIDID where GRIDID=grid;
select count;

END

当我打电话

 checkInOut("",@aaa);
             select @aaa;

当我打电话给它时,它会返回1,这是错误的。

2 个答案:

答案 0 :(得分:2)

  

但是当我通过""空白值仍然返回1个计数。

因为当你通过提供一个空字符串表示它是空白时,它是一个值。空字符串也被视为数据库中的值,因此您将计为1

MySQL docs说:

  

<强> COUNT(表达式)

     

返回行中expr的非NULL值的数量   由SELECT语句检索。结果是BIGINT值。

因此,如果您希望count返回 0 ,则不要将字符串设为空"",而是需要将值设为NULL。< / p>

答案 1 :(得分:0)

哟伙伴,试试这个:

DELIMITER $$
CREATE
    DEFINER=`dadclient`@`123.63.249.169`
    PROCEDURE `checkInOut`(
        IN `grid` VARCHAR(50),
        OUT `count` INT
    )
BEGIN
-- insert value into variable
    SET `count` = (
        select count(GRIDID)
        from GRIDID
        where GRIDID=grid;
    );
END$$
DELIMITER ;  

所以在您的申请中,例如php你可以CALL checkInOut($input, $output);。因为您已在程序SELECT...

中将count声明为OUT,因此您无需在初始代码中使用最终parameter部分。

注意:

  • 名称GRIDID是您桌子的名称吗?因为正如我所见,您还在WHERE语句中将其用作key过滤器
  • 关于您的查询,据推测它应该是contain one row的结果。请检查那也是交配