【发布时间】:2015-09-30 05:19:31
【问题描述】:
所以,我有一个包含游戏分数的表,称之为 RESULTS_TABLE,为了简单起见,我们假设它包含以下列:
year - tournament - GameID - player1 - player2 - winner
同一玩家可以在一场锦标赛中玩多场比赛,在这种情况下,您将拥有多条具有相同 player1/player2 的线路,但 GameID 不同。
我想写的是一个函数,它返回一个玩家在给定锦标赛中的对手数量。
我使用 MYSQL 工作台。在命令窗口中,我运行了以下命令:
select SQL_CALC_FOUND_ROWS year from RESULTS_TABLE where player1 = 'NAME' and comp = 'COMP' and year = 2015 group by player2;
select FOUND_ROWS()
这会返回玩家在表格中列为 player1 时的对手数。如果我在交换玩家 1 和玩家 2 的位置进行另一个选择,我将获得玩家列为玩家 2 时的对手数量。添加这些将产生所需的结果。
我尝试使用 _comp、_year 和 _nick 作为输入参数的函数:
BEGIN
declare NumOfOppos int;
declare oppos1 int;
declare oppos2 int;
select SQL_CALC_FOUND_ROWS year from RESULTS_TABLE where player1 = _nick and comp = _comp and year = _year group by player2;
select FOUND_ROWS() into oppos1;
select SQL_CALC_FOUND_ROWS year from RESULTS_TABLE where player2 = _nick and comp = _comp and year = _year group by player1;
select FOUND_ROWS() into oppos2;
select (oppos1+oppos2) into NumOfOppos;
return NumOfOppos;
END
然而,这在尝试创建函数时会出现以下错误:
ERROR 1415: Not allowed to return a result set from a function
我不明白......我究竟在哪里返回一个集合,我只想返回一个值,我相信我所做的......
非常感谢任何帮助。
【问题讨论】:
-
当您提出有关 sql 查询的问题时,如果您提供sqlfiddle,请始终提供帮助,这样我们就可以尝试您在做什么。此外,您可能会通过简化问题得到更好的理解。
标签: mysql