1

こんにちは、単純に 1,2,3,4,5,6,7,8,9,10 ランクを追加したいと思います。

私の出力は次のようになります。

USER ID | SCORE
2       | 10242
13231   | 3427
23732   | 3378
24638   | 2934
23468   | 1898

私が達成しようとしていることは次のとおりです。

RANK | USER ID | SCORE
#1   | 2       | 10242
#2   | 13231   | 3427
#3   | 23732   | 3378
#4   | 24638   | 2934
#5   | 23468   | 1898

これは私のphpです:

<?php $result = mysql_query("SELECT * FROM `users_score` ORDER BY `users_score`.`score` DESC LIMIT 0 , 10") or die(mysql_error());
if(mysql_num_rows($result) > 0): ?>
<table>
    <tr>
        <th style="text-align:left;">ID</th>
        <th style="text-align:left;">SCORE</th>
    <tr>
    <?php while($row = mysql_fetch_assoc($result)): ?>
    <tr>
        <td><?php echo $row['user_id']; ?></td>
        <td style="font-weight: bold; color: #008AFF;"><?php echo $row['score']; ?></td>
    </tr>
    <?php endwhile; ?>
</table>
<?php endif; ?>

これには単純なようなカウント関数がありますか?

4

4 に答える 4

1

変数を使用して、クエリでそれを行うことができます。

SELECT  @row:=@row+1 as RankNo,
        a.UserID,
        a.Score
FROM    tableName a, (SELECT @row:=0) b
ORDER   BY a.Score DESC

ただし、DownSide があり、引き分けのスコアを処理しません

ランクを追加したい場合は、 #`#をカンカチ化しますRankNo with

更新 1

SELECT  CONCAT('#', @row:=@row+1) as RankNo,
        a.UserID,
        a.Score
FROM    tableName a, (SELECT @row:=0) b
ORDER   BY a.Score DESC
于 2013-02-12T12:04:01.370 に答える
1
SELECT (@rank := @rank + 1) AS rank, user_id, score
FROM (  SELECT user_id, score
        FROM scores, (SELECT @rank := 0) AS vars
        ORDER BY score DESC) AS h

SQLフィドル

于 2013-02-12T12:04:37.920 に答える
0
If you just want changes in your php here is the code...

<?php 
$result = mysql_query("SELECT * FROM `users_score` ORDER BY `users_score`.`score` DESC LIMIT 0 ,10")  or die(mysql_error());

$rank=0;
$temp_score=0;

if(mysql_num_rows($result) > 0): ?>
<table>
    <tr>
        <th style="text-align:left;">RANK</th>
        <th style="text-align:left;">ID</th>
        <th style="text-align:left;">SCORE</th>
    <tr>
    <?php while($row = mysql_fetch_assoc($result)): 
         if($temp_score!=$row['score'])
             $rank++;
    ?>
    <tr>
     <td><?php echo "#".$rank; ?></td>
     <td><?php echo $row['user_id']; ?></td>
     <td style="font-weight: bold; color: #008AFF;"><?php echo $row['score']; ?></td>
    </tr>
    <?php 
         $temp_score=$row['score];
      endwhile; ?>
</table>
<?php endif; ?>
于 2013-02-12T12:25:45.497 に答える
0

あなたが探しているのは、MS SQL の row_number() 関数に相当するものです。これは以前に回答されています。たとえば、ここまたはここ

答えは、次のようなものを使用することです。

SELECT @rn:=@rn+1 as RANK, ID, SCORE
       FROM `users_score`, (SELECT @rn:=0) as rn
       ORDER BY `users_score`.`score` DESC LIMIT 0

アップデート

興味深いことに、一致するスコアの処理は SQL で行うことができます。

SELECT  @rn := @rn + case (@ls-SCORE) when 0 then 0 else @s end as RANK,
        ID,
        SCORE,
        @s := case (@ls-SCORE) when 0 then @s+1 else 1 end as STEPSIZE,
        @ls := SCORE as LASTSCORE
FROM    `users_score`.`score` a,
        (SELECT @rn := 0) b,
        (SELECT @ls := max(SCORE)+1 FROM `users_score`.`score`) c,
        (SELECT @s := 1) d
ORDER   BY a.Score DESC LIMIT 0

ただし、これを行う場合は、PHP コードの方が簡単です。

于 2013-02-12T12:17:39.687 に答える