Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql存储函数提供与原始查询不同的结果(某些条件不起作用)_Mysql_Sql - Fatal编程技术网

Mysql存储函数提供与原始查询不同的结果(某些条件不起作用)

Mysql存储函数提供与原始查询不同的结果(某些条件不起作用),mysql,sql,Mysql,Sql,我在mysql存储函数中遇到了一个奇怪的问题。该函数返回的结果与单独运行查询时不同。以下是我的功能: DELIMITER $$ CREATE DEFINER=`admin`@`%` FUNCTION `getARetention` (appID int(10), currentDate DATE) RETURNS int(11) READS SQL DATA DETERMINISTIC BEGIN RETURN (SELECT count(DISTINCT UserId

我在mysql存储函数中遇到了一个奇怪的问题。该函数返回的结果与单独运行查询时不同。以下是我的功能:

DELIMITER $$
CREATE DEFINER=`admin`@`%` FUNCTION `getARetention`
(appID int(10), currentDate DATE) 
RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

  RETURN 
(SELECT count(DISTINCT UserId)
           FROM
               Session 
       WHERE  (Date(Started) = currentDate  AND AppId=appID));
END
我这样称呼它:

SELECT getARetention(5,DATE('2013-04-03'));
以下是单独的查询:

SELECT count(DISTINCT UserId)
           FROM
               Session 
       WHERE  (Date(Started) = DATE('2013-04-03')  AND AppId=5)
函数返回2502,这是错误的。单独查询返回5,这是正确的。另外,如果我从单独的查询中删除并且AppId=5,那么它将返回2502,这意味着在存储的函数中该条件不起作用

有人知道为什么吗?我已经有一段时间没有使用mysql了,所以我可能遗漏了一些东西。

mysql在这里无法区分变量名和列名

以其他方式命名变量:

DELIMITER $$
CREATE DEFINER=`admin`@`%` FUNCTION `getARetention`
        (
        _appID int(10),
        _currentDate DATE
        ) 
RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
        RETURN  (
                SELECT COUNT(DISTINCT UserId)
                FROM   Session 
                WHERE  appId = _appId
                       AND started >= _currentDate
                       AND started < _currentDate + INTERVAL 1 DAY
                );
END
$$
MySQL无法在此处区分变量名和列名

以其他方式命名变量:

DELIMITER $$
CREATE DEFINER=`admin`@`%` FUNCTION `getARetention`
        (
        _appID int(10),
        _currentDate DATE
        ) 
RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
        RETURN  (
                SELECT COUNT(DISTINCT UserId)
                FROM   Session 
                WHERE  appId = _appId
                       AND started >= _currentDate
                       AND started < _currentDate + INTERVAL 1 DAY
                );
END
$$