PHP从数据库计算排名

时间:2014-08-14 17:31:03

标签: php mysql database

我遇到了一个问题,我有一个数据库,在该数据库中有不同的名称,ID和硬币。我想向人们展示他们的等级,所以如果你拥有最多的硬币,你的等级必须为1,而当你的数字为78172时,你的等级必须为78172。

我知道我可以这样做:

SELECT  `naam` ,  `coins` 
FROM  `gebruikers` 
ORDER BY  `coins` DESC 

但是我如何才能获得你的排名,用PHP:S?

有人可以帮助解决它,我真的很感激;)

6 个答案:

答案 0 :(得分:0)

您可以使用循环和计数器。 MySql的第一行是第一个排名,即列表中的第一行。

答案 1 :(得分:0)

我认为你想要的东西是:

1 - John Doe 第二名 - 简·多伊 .. ..

正确?

请参阅:http://www.if-not-true-then-false.com/2010/php-1st-2nd-3rd-4th-5th-6th-php-add-ordinal-number-suffix

不久前帮帮我。

答案 2 :(得分:0)

您可以使用新的可录制的

$i = "1";

pe care o poti folosi in structura ta foreach,而for,for,重复si o incrementezi mereu。 并且你在像foreach这样的结构中使用它,而for,for,repeat和increment

$i++;

这是最简单的方法

答案 3 :(得分:0)

上面没有代码示例...所以这里是PHP

// Your SQL query above, with limits, in this case it starts from the 11th ranking (0 is the starting index) up to the 20th
$start = 10; // 0-based index
$page_size = 10;
$stmt = $pdo->query("SELECT  `naam` ,  `coins` FROM  `gebruikers`  ORDER BY  `coins` DESC LIMIT {$start}, {$page_size}");

$data = $stmt->fetchAll();

// In your template or whatever you use to output
foreach ($data as $rank => $row) {
    // array index is 0-based, so add 1 and where you wanted to started to get rank
    echo ($rank + 1 + $start) . ": {$row['naam']}<br />";
}

注意:我懒得投入准备好的陈述,但请查阅并使用准备好的陈述。

答案 4 :(得分:0)

如果您有一个会话表,您可以从中提取记录,然后使用这些值获取硬币值,并按降序排序。

如果我们假设您的会话表是sessions(session_id int not null auto_increment, user_id int not null, session_time,...)并且我们假设只有登录的用户会有会话值,那么您的SQL看起来像这样:(注意:我假设您也有gebruikers表上的user_id列)

SELECT  g.*
FROM  gebruikers as g, sessions as s WHERE s.user_id = g.user_id 
ORDER BY  g.coins DESC 

然后,您将使用行迭代器遍历结果并显示&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;等。短版本看起来像

//Connect to database using whatever method you like, I will assume mysql_connect()
$sql = "SELECT  g.* FROM  gebruikers as g, sessions as s WHERE s.user_id = g.user_id ORDER BY  g.coins DESC";
$result = mysql_query($sql,$con); //Where $con is your mysql_connect() variable;
$i = 0;
while($row = mysql_fetch_assoc($result,$con)){
    $row['rank'] = $i;
    $i++;
    //Whatever else you need to do;
}

修改

http://sqlfiddle.com/#!2/8faa9/6

找到一个SQLFiddle

我来到了那里有用的东西;我不知道它是否会在php中给出,但我想我会以任何方式向你展示

SET @rank = 0; SELECT *,(@rank := @rank+1) as rank FROM something order by coins DESC

编辑2

这适用于来自文件的php查询。

SELECT @rank:=@rank as rank,
    g.*
FROM
    (SELECT @rank:=0) as z,
    gebruikers as g
    ORDER BY coins DESC

答案 5 :(得分:-1)

如果你想获得一个特定用户的排名,你可以直接通过计算你想要排名的用户拥有更多硬币的用户数量来直接在mysql中这样做:

SELECT COUNT(*)
FROM  `gebruikers`
WHERE `coins` > (SELECT `coins` FROM `gebruikers` WHERE `naam` = :some_name)

(假设按名称搜索)

现在排名将是返回的计数+ 1。

或者你在mysql中做SELECT COUNT(*) + 1 ...