達成されたメダルに依存する最高のプレーヤーを表示するMysql/php
私はそのようなメダルテーブルを持っています:
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には2つの金メダルと1つの銅メダルがあります
プレーヤー1には2つの銀メダルがあります
プレーヤー3には銅メダルが1つあります
ですから、最後の手段まで、誰が一番良いかを順番に示すことはできません:
プレーヤー1には、プレーヤー1にさらに2つの金メダルがあるため
プレーヤー3は、メダルが1つしかないのに、金メダルです
プレーヤー2は、メダルを2つ持っていても最後のプレーヤーですが、銀メダルです
だから、私は彼らが持っているメダルの合計ではなく、彼らが持っているメダルのカテゴリーでそれらを注文したくないことを理解してほしいと思います
例:プレーヤーXが金メダル2個、銀メダル1個、銅メダル0個を持っているが、プレーヤーYが金メダル1個、銀メダル10個、銅メダル5個を持っている場合でも、金メダルが最も多いので、プレーヤーXが最初になるはずです。 !! 。
問題について正しく説明したと思います。
mysqlクエリとphpでどのように作成するかについての提案をお届けします。
よろしく。
答え :
解決策:
MySQLでは、カテゴリの数で並べ替えるのはかなり簡単です。
SELECT playerid
FROM medals
GROUP BY playerid
ORDER BY SUM(type=0) DESC, SUM(type=1) DESC, SUM(type=2) DESC
または、すべての情報を一度に取得するには;
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
答え :
解決策:
私が正しく理解している場合は、「最初に金の金属が最も多く、次に銀が最も多く、次に青銅が最も多い」という順序で注文しますか?
それが正しければ、は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;
答え :
解決策:
わかりました、これはかなり単純なプロセスです。あなたの説明は途中でした。
各メダルの合計を降順で並べ替える必要があります(つまり、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
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。