MYSQL返回函数的行数

时间:2015-07-11 14:11:31

标签: mysql

所以,我有一个包含游戏分数的表,称之为RESULTS_TABLE,为简单起见,假设它包含以下列:

year - tournament - GameID -  player1 - player2 - winner

同一个玩家可以在一场锦标赛中玩多个游戏,在这种情况下,您将拥有多个具有相同player1 / player2但具有不同GameID的行。

我想写的是一个函数,它返回一个玩家在特定锦标赛中拥有的对手

我使用MYSQL Workbench。在命令窗口中,我运行了以下命令:

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

我不知道......我到底在哪里归还一套,我只想回复一个价值,我相信我所做的......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如何在一个查询中完成所有操作?

select count(*)
from RESULTS_TABLE
where comp = 'COMP' and year = 2015 and
      'NAME' in (player1, player2);

或者如果游戏可以多次列出:

select count(distinct gameid)
from RESULTS_TABLE
where comp = 'COMP' and year = 2015 and
      'NAME' in (player1, player2);

仅在需要查询的结果时才使用SQL_CALC_FOUND_ROWS。正常使用是应用程序中的分页。

否则,您将返回表中的所有数据,而不仅仅是计数,这很容易在SQL中计算。

编辑:

对于对手的总数,计算非常相似:

select count(distinct (case when player1 = 'NAME' then player2
                            else player1 end)) as NumOpponents
from RESULTS_TABLE
where comp = 'COMP' and year = 2015 and
      'NAME' in (player1, player2);

您甚至可以在同一查询中获得对手的游戏数量。