我有一个名为“member_points”的表,其设置如下:
|----|-------|----------|------------------------|
| id | uid | points | last_loggedin |
|----|-------|----------|------------------------|
| 1 | 1 | 5075 | 2012-08-02 02:04:00 |
|----|-------|----------|------------------------|
| 2 | 2 | 2026 | 2012-08-04 02:15:02 |
|----|-------|----------|------------------------|
我有一个功能如下。我希望函数能够根据“点”行中的数字来回显或返回“排名#1”或“排名#2”等级。
function getTopRanks($id) {
$sql = "SELECT MAX(points) AS toppoints FROM member_points";
$r = mysql_query($sql);
if ( $r !== false && mysql_num_rows($r) > 0 ) {
while ( $a = mysql_fetch_assoc($r) ) {
$points = stripslashes($a['toppoints']);
return ''.$points.'';
}
}
}
有人可以帮助我实现这个目标吗?
答案 0 :(得分:3)
在你的mysql查询中使用ORDER BY(http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html)
所以你的查询将成为
SELECT points FROM member_points ORDER BY points DESC
这将根据点数对查询结果进行排序。 (DESC将使它们下降,ASC将使结果上升)。
答案 1 :(得分:3)
我认为您将根据积分对用户进行排名。 对于此类问题,我建议您先按 DESC 顺序对用户进行排名。然后拾取欲望值形成行。
function getTopRanks($id) {
$sql = "SELECT uid FROM member_points ORDER BY points DESC ";
$r = mysql_query($sql);
if ( $r !== false && mysql_num_rows($r) > 0 ) {
while ( $a = mysql_fetch_assoc($r) ) {
$points = stripslashes($a['toppoints']);
return ''.$points.'';
}
}
}
这将解决您的问题。:)
根据您的要求更新
function getTopRanksUser($id) {
$userPos ="Ranked position is:";
$count = 0;
$sql = "SELECT uid FROM member_points ORDER BY points DESC ";
$r = mysql_query($sql);
if ( $r !== false && mysql_num_rows($r) > 0 ) {
while ( $a = mysql_fetch_assoc($r) ) {
$count = $count+1;
$userPosCount = $userPos+$count;
return $userPosCount;
}
}
}
应该返回userPos + count。因为count会增加表中的行数,而字符串排名位置始终保持不变。 这将给出结果。您可以根据您的要求更改返回字符串。 :) 感谢。
答案 2 :(得分:0)
这是我用于排名的内容......此代码还会正确考虑关系和显示。只需将“username”和“points”更改为数据库中相应的列名,并设置db connection vars:$ hostName $ databaseNanme $ username和$ password for your connection。
希望这有帮助!
$sql1 = "SET @rnk=0; SET @rank=0; SET @scount=0;";
$sql2 = "SELECT username, points, rank FROM
(
SELECT AA.*,BB.username, points
(@rnk:=@rnk+1) rnk,
(@rank:=IF(@scount=points,@rank,@rnk)) rank,
(@scount:=points) newscount
FROM
(
SELECT * FROM
(SELECT COUNT(1) scorecount,points
FROM users GROUP BY points
) AAA
ORDER BY points DESC
) AA LEFT JOIN users BB USING (points)) A;";
try {
$conn = new PDO('mysql:host='.$hostName.';dbname='.$databaseName, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->query($sql1);
$data = $conn->query($sql2);
$standings = $data->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
error_log( 'ERROR: ' . $e->getMessage() );
}
的print_r($排名);