2012-01-24 52 views
2

數據庫:Mysql的排名位置

id first_name points 
1 Bob   12 
2 Jane    50 
3 Jack    2 
4 Bill    10 
5 Nick    62 
6 Kathy   18 
7 Steve   42 
8 Anne    52 

腳本:

<?php 
$con = mysql_connect("localhost","root","lol"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("st", $con); 

$result = mysql_query("SELECT first_name,points, 
      @curRank := @curRank + 1 AS rank 
FROM  person p, (SELECT @curRank := 0) r 
ORDER BY points DESC"); 

while($row = mysql_fetch_array($result)) 
    { 
    echo $row['first_name'] . " " . $row['points']; 
    echo "<br />"; 
    } 

mysql_close($con); 
?> 

我能得到什麼;

Nick 62 
Anne 52 
Jane 50 
Steve 42 
Kathy 18 
Bob 12 
Bill 10 
Jack 2 

現在我需要添加到用戶位置級別(類似於頂部功能) 例如:

Nick 62 Top 1 
Anne 52 Top 2 
Jane 50 Top 3 
Steve 42 Top 4 and so on..... 
Kathy 18 
Bob 12 
Bill 10 
Jack 2 

+0

什麼問題?看看你的SQL,我會說'$ row ['rank']'應該包含你感興趣的值。 – flesk

+0

對於具有相同數量的積分的人來說,他們應該排在第一位還是第一位? – bowlerae

回答

1
$position = 1; 
while($row = mysql_fetch_array($result)) 
    { 
    echo $row['first_name'] . " " . $row['points'] . " Top ".$position; 
    echo "<br />"; 
    $position++; 
    } 
+1

這並不總是有效,如果結果分頁,那麼在每個頁面的開始位置重置爲1。 – bowlerae

+0

@bowlerae是的,但在這個問題上沒有關於分頁的內容。同樣,如果2個或更多的結果具有相同的排名你需要把它標記爲'1,2,3-5,3-5,3-5,6,7'。但在這個問題上也沒有關係。不要試圖在簡單問題中發現困難:)任何方式您可以編輯第一行並添加諸如'$ position =($ page-1)* $ per_page + 1;'的代碼並且我的代碼可以正常工作。祝你有美好的一天。 –

+0

我很好奇,因爲我需要幫助排名和沒有人已經解決這個問題,我不想問一個新的問題,因爲它本質上是同一個問題而被拋棄。 – bowlerae

0
<?php 
$con = mysql_connect("localhost","root","lol"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("st", $con); 

$result = mysql_query("SELECT first_name,points FROM person ORDER BY points DESC"); 

$rank=1; 
while($row = mysql_fetch_array($result)) 
    { 
    echo $row['first_name'] . " " . $row['points'] . " Top " . $rank++; 
    echo "<br />"; 
    } 

mysql_close($con); 
?> 
+1

這並不總是有效,如果結果分頁,那麼在每頁開始時排名會重置爲1。 – bowlerae

+0

在OQ中沒有提及分頁,並且沒有LIMIT claude的查詢將它排除。使用FROM(SELECT @curRank:= 0)查詢'和我的$ rank = 1具有完全相同的效果。感謝downvoting。 –

0

你應該考慮實際提取和打印出排名:

echo $row['first_name'] . " " . $row['points']. " Top {$row['rank']}"; 
+0

我的不好,我沒有注意到它。 – TJL

-1
$top = 1; 
    while($row = mysql_fetch_array($result)) 
    { 
     echo $row['first_name'] . " " . $row['points']." TOP ".$top ; 
    echo "<br />"; 

    $top++; 
    } 
+0

這並不總是有效,如果結果分頁,那麼top會在每頁開始時重置爲1。 – bowlerae

1

從查詢我加入MySQL中使用CONCAT功能TOP字。 試試這個:

SELECT first_name, 
     points, 
     CONCAT('TOP ',@curRank := @curRank + 1) AS rank 
FROM  person p, (SELECT @curRank := 0) r 
ORDER BY points DESC"