[MYSQL/PHP]同着表示でのランキング表示
現在、ランキングシステムを構築中です。
DBのポイント順にランキングとしてJSONで出力して、
5件目まで行くと、次の5件という風に更新するようなプログラムを作りたいと思います。
また、ポイントが同数のものは同ランクとして出力したいと思っております。
point table
-----------------
| ID| POINT |
---------------—
| 1 | 100 |
| 2 | 50 |
| 3 | 50 |
| 4 | 20 |
| 5 | 20 |
| 6 | 10 |
| 7 | 80 |
| 8 | 70 |
| 9 | 40 |
|10 | 30 |
---------------—
1回目) http://localhost:8080/ranking/?offset=0
出力:
[{"data":[{"rank":1,"id":1,"point":100},{"rank":2,"id":7,"point":80},{"rank":3,"id":8,"point":70},{"rank":4,"id":2,"point":50},{"rank":4,"id":3,"point":50}]}]
2回目) http://localhost:8080/ranking/?offset=5
[{"data":[{"rank":6,"id":9,"point":40},{"rank":7,"id":10,"point":30},{"rank":8,"id":4,"point":20},{"rank":8,"id":2,"point":20},{"rank":10,"id":6,"point":10}]}]
上記のような出力をするのに、必要なMYSQLとPHPの処理を考えているのですが、上手くいきません。
何かアドバイスお願い致します!
また何かGETで引き渡すデータは必要でしょうか?
$offset = $_GET[‘offset’];
$sql = ‘SELECT id, point FROM point ORDER BY point DESC LIMIT 5 OFFSET ’.$offset;
$selectResult = mysql_query($sql );
$rank = 1;
$last_score = null;
$rank_count = 0;
$i = 0;
foreach($selectResult as $val){
$rank_count++;
if($last_score != $val['point‘]){
$rank = $rank_count;
$last_score = $val['point‘];
}
$jsonArray[‘data'][$i]['rank'] = $rank;
$jsonArray[‘data'[$i]['point'] = $val->point;
$jsonArray[‘data'[$i]['userUid'] = $val->user_uid;
$i ++;
}
return json_encode($jsonArray);
お礼
ありがとうございました。 とても参考になりました。