0
はmysql-これらが一つのテーブルです:自己スコアで他の人に比べてランク付けなさい
mysql> SELECT * FROM test_member order by points asc;
+-----------+---------+
| member_id | points |
+-----------+---------+
| 34 | 1000 |
| 22 | 2000 |
| 33 | 2000 |
| 35 | 3000 |
+-----------+---------+
右の結果: 私のMEMBER_IDが「35」の場合、私のランクが「1」になり、
私のMEMBER_IDが '22' の場合、私のランクが '2' になり、私のMEMBER_IDが '33' の場合
することは、私のランクは '2' になり、
私のMEMBER_IDが '34' であり、私のランクは「3」、
....
などです。
試み - 1
SELECT * FROM (
SELECT member_id,
@points := @points + 1 AS rank
FROM test_member p, (SELECT @points := 0) r
ORDER BY points DESC
) t
WHERE member_id='33';
+-----------+----------------------------------------+
| member_id | rank |
+-----------+------------+------+---------+----------+
| 33 | 3.000000000000000000000000000000 |
+-----------+----------------------------------------+
試み - 2(のMySQL + PHPの方法)
<?php
$simulation_ponits = 1000;
$sql = '
SELECT t.points, COUNT(*) as count_num
FROM test_member as t
WHERE t.points > ' . $simulation_ponits . '
GROUP BY t.points
HAVING t.points > ' . $simulation_ponits .'
';
$result = mysql_query($sql);
$count_rank = 1;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$count_rank +=$row['count_num'];
}
+--------+-----------+
| points | count_num |
+--------+-----------+
| 2000 | 2 |
| 3000 | 1 |
+--------+-----------+
# $count_rank => 3
両方試みが唯一のMySQL + PHPの方法であるが はIすることができ、正しい結果を示すことができます他の方法でこれをやろうとしましたか? ありがとうございます。
をはい、これは私が欲しいもの、感謝です。 – kkasp