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 を返しますが、これは正しいです。また、単独のクエリから「AND AppId=5」を削除すると、2502 が返されます。これは、保存された関数で条件が機能していないことを意味します。
誰でも理由がわかりますか?しばらく mysql を使用していないため、おそらく何か不足しています。