![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
質問です。
PHPにて、MySQLからデータを取得し
取得したデータを順位毎にランキング表示するプログラムを記述しているのですが
順位が重なった場合の処理に試行錯誤しています。
具体的には、野球で言えばホームラン数のランキングのように
MySQLから「名前」「ホームラン数」のみを取得します。
順位は、ホームラン数でORDER BYにてソートします。
しかし実際は、ホームラン数が同数の場合もあるので
そこをPHPロジックにて同率順位として表示できるプログラムを作りたいのです。
一般的にどのような記述方法で実現するのが望ましいのかアドバイス頂ければ幸いです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
たとえば、こんな風にMySQL側で処理する手もあります。
MySQLのバージョンによってはもう少し効率的な書き方もできるかと。
CREATE TABLE `ranking` (`player` VARCHAR(20) NOT NULL ,`HR` int,PRIMARY KEY (`player`));
INSERT INTO `ranking` VALUES
('a',20),
('b',20),
('c',15),
('d',25),
('e',10),
('f',5),
('g',10),
('h',25),
('i',5),
('j',20),
('k',5),
('l',25),
('m',5),
('n',10)
/* データ挿入 */ ;
SET @RANK=0 /* 変数初期化 */;
CREATE TEMPORARY TABLE `tempranking`
SELECT `HR`,@RANK+1 AS `rank`,@RANK:=@RANK+COUNT(*) AS `count`
FROM `ranking`
GROUP BY HR
ORDER BY HR DESC
/* ランキングのカウント */ ;
SELECT `player`,`rank`,`ranking`.`HR`
FROM `ranking`
INNER JOIN `tempranking` USING(`HR`)
ORDER BY `HR` DESC
/* ランキングの出力 */ ;
No.1
- 回答日時:
取り出したデータの書き出し方法にもよりますが。
。//MySQLで取ってきたデータ
$data = array(
array('name1'=>36),
array('name2'=>35),
array('name3'=>34),
array('name4'=>34),
array('name5'=>33),
array('name6'=>33),
array('name7'=>33),
array('name8'=>29)
);
$last = 0;
$rank = 0;
$tmp_rank = 1;
foreach($data as $_v) {
list($name, $num) = each($_v);
if ($last == $num) {
$tmp_rank++;
} else {
$rank += $tmp_rank;
$tmp_rank = 1;
}
$last = $num;
echo "$rank 位 $name\n";
}
こんなのはどうでしょう。
ちょっと汚い感じがしますが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 弁護士・行政書士・司法書士・社会保険労務士 行政書士試験の民法についての質問になります。 時効についての質問になります。 問 Aが甲債権の担保と 1 2023/07/06 21:51
- 弁護士・行政書士・司法書士・社会保険労務士 ★行政書士試験の民法についての質問になります。 時効についての質問になります。 問 Aが甲債権の担保 1 2023/05/22 21:49
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- その他(Microsoft Office) ランクイコール関数について教えてください。 例えば A、B組があったとして、1、2、3班に分かれてい 2 2023/07/05 21:33
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
nCmの組み合わせをPHPで表現す...
-
数学の「組み合わせ」を求める...
-
選択日と終了日を配列で取得したい
-
pg_insertで現在の時刻を挿入す...
-
HTTPのメッセージボディについ...
-
csvファイルを読み込み→上書き...
-
配列をループでたくさん宣言し...
-
C言語でCSVファイルの行数を読...
-
php 多次元配列において指定し...
-
配列を回すとき、最後の要素だ...
-
OCI で、SELECT結果行数を取得...
-
PHPのカッコ[ ]の使い方について
-
Smartyのテンプレートからjavas...
-
Resource id #3 と表示されま...
-
ftokが動かない?
-
セッション配列の取得の仕方
-
phpでCSVファイルの中身を多次...
-
CSVデータの行数カウントをした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
日付、時間の2段階でソート
-
NGワード設定もしくはテキス...
-
掲示板のあらし対策
-
flickrでの画像を取得について
-
テキストボックスの日本語をロ...
-
PHPでファイルアップローダー
-
HTTPのメッセージボディについ...
-
PEAR・MDB2のモジュールロード...
-
phpのin_array()でわからない事...
-
PHP5の外部コマンド実行で、バ...
-
Mysqlとphpでソートや更新時の...
-
しりとり 無限ループ?
-
2次元配列の値の受け渡しについ...
-
if の中の 複数のor についてお...
-
pukiwikiのユーザ認証の設定で...
-
Zend_Form_Element_Hash
-
「ローマ字 -> ひらがな」へPHP...
-
プログラミングのPythonのnoteb...
おすすめ情報