【问题标题】:MYSQL return number of rows from a functionMYSQL 从函数返回行数
【发布时间】: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


【解决方案1】:

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

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);

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

【讨论】:

  • 感谢您的回答。这将返回 GAMES 的总数,但我想要对手的总数。当对手可以在 player1 列或 player2 列中时,我真的不明白如何使用 distinct 在一个查询中获取所有内容。
  • @NiklasAndersson 。 . .一个查询比多个查询简单得多。
  • 感谢编辑,现在我可以正常使用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2012-08-05
  • 2013-07-25
相关资源
最近更新 更多