3

我有一张这样的奖牌桌:

有 3 行:奖牌 ID、奖牌类型(0 = 金、1 = 银、2 = 铜)和 playerId

所以我有一个例子:

id  | type |  Playerid
---   ----   ---------
 1     0         1
 2     2         1
 3     0         1
 4     1         2
 5     1         2
 6     0         3

*所以这意味着:

玩家 1 有两枚金牌和一枚铜牌

选手1有2枚银牌

选手 3 获得 1 枚铜牌

所以我不能按照谁是最好的顺序向他们展示,直到最后一个手段:

球员 1 因为他有球员 1 有 2 多枚金牌

玩家 3 即使他只有 1 枚奖牌,但它是金牌

选手 2 是最后一位,即使他有 2 枚奖牌,但这是银牌

所以我希望你明白,我不想按他们拥有的奖牌总和,而是按他们拥有的奖牌类别来排序

例子:如果某选手X有2金1银0铜,而选手Y有1金10银5铜,即使是选手X也应该是第一,因为他的金牌最多!.

我希望我对问题给出了正确的解释。

为您提供有关如何通过 mysql 查询和 php 制作的建议。

问候。

4

3 回答 3

3

在 MySQL 中,按类别数量排序是相当简单的;

SELECT playerid 
FROM medals
GROUP BY playerid
ORDER BY SUM(type=0) DESC, SUM(type=1) DESC, SUM(type=2) DESC

一个用于测试的 SQLfiddle

或者,一次获取所有信息;

SELECT playerid, SUM(type=0) Gold, SUM(type=1) Silver, SUM(type=2) Bronze
FROM medals
GROUP BY playerid
ORDER BY Gold DESC, Silver DESC, Bronze DESC

另一个 SQLfiddle

于 2013-10-07T15:28:21.360 回答
0

如果我理解正确,您想按“谁拥有最多的金金属,然后是最多的银,然后是最多的青铜”来排序?

如果这是正确的,您可以使用SUM(), 但在每个奖牌类型级别上,然后在这些字段上排序:

SELECT
   PlayerId,
   SUM(type = 0) AS gold,
   SUM(type = 1) AS silver,
   SUM(type = 2) AS bronze
FROM
    Medals
GROUP BY
    PlayerId
ORDER BY
    gold, silver, bronze;
于 2013-10-07T15:30:12.100 回答
0

好的,这是一个相当简单的过程。你的描述已经完成了一半。

您只需按每枚奖牌的总和按降序排列(即 4 枚金牌击败 3 枚金牌;4 枚金牌和 1 枚银牌击败 4 枚金牌和 1 枚铜牌)。您还需要按 Playerid 分组,以便每一行对应一个玩家。

SELECT Playerid 
FROM MedalsTable 
GROUP BY Playerid 
ORDER BY SUM(type='0') DESC, SUM(type='1') DESC, SUM(type='2') DESC
于 2013-10-07T15:34:55.697 回答