Ich habe eine Funktion in meinem SQL geschrieben, die die Anzahl der Datensätze basierend auf einigen IDs zurückgibt. Sie gibt jedoch immer den Wert 1950 zurück. Hier ist meine Abfrage.
CREATE DEFINER=`trajectory`@`%` FUNCTION `fn_ReturnAlreadyPlayedGames`(AppId int(11),AppUserid int(11))
RETURNS int(11)
BEGIN
declare Counting int(11);
set Counting=(
select count(*)
from user_sessions
where appid= 5 and appuserid= 41 and status=1);
RETURN Counting;
END
Ich habe vorerst statische IDs übergeben. Wenn ich diese Abfrage als einfaches SQL ausführe, gibt sie 8 Zeilen zurück, aber innerhalb der Funktion gibt sie immer 1950 zurück.
Bitte helfen Sie mir dabei. Vielen Dank im Voraus.
Antworten:
0 für die Antwort № 1da ist ein kleiner fehler;)
where appid= 5 and appuserid= 41 and status=1);
Sie sollten ersetzen Appid und appuserid mit Ihren Variablen
0 für die Antwort № 2
Das Problem ist die Verwendung des gleichen Namens für die Funktionsparameter und die Spalten. Verwenden Sie daher einen Alias, wenn Sie auf die Spalten verweisen. Oder benennen Sie einfach die Funktionsparameter um.
DELIMITER $$
CREATE FUNCTION fn_ReturnAlreadyPlayedGames(AppId int(11),AppUserid int(11))
RETURNS int(11)
BEGIN
declare Counting int(11);
set Counting=(select count(*) from user_sessions us where us.appid= 5 and us.appuserid= 41 and us.status=1);
RETURN Counting;
END$$
DELIMITER ;
Mit den Parametern
DELIMITER $$
CREATE FUNCTION fn_ReturnAlreadyPlayedGames(appid_param int(11),appuserid_param int(11))
RETURNS int(11)
BEGIN
declare Counting int(11);
set Counting=(select count(*) from user_sessions us where us.appid= appid_param and us.appuserid= appuserid_param and us.status=1);
RETURN Counting;
END$$
DELIMITER ;