0

問題があります。. 私の場合、私はチャンピオンシップを作ります。. ご存知のように、勝者は最高値によって決定されます。. 例 :

$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);
$i=0;
while($row = mysql_fetch_array($result)) {
    $1++;
    echo "rank ".$i." is ".$row['name']." with point ".$row['point'].";
}

それは表示されます

  • ランク 1 はポイント 10 の abc です
  • ランク 2 はポイント 9 で def です
  • ランク3はポイント8でギリギリ
  • ランク4はjklでポイント7
  • ランク5はポイント7でmno
  • ランク 6 はポイント 3 で pqr です
  • ランク 7 は stu with ポイント 1 です

質問。.

  1. 結果を見てください。. ランク 4 とランク 5 は同じポイントです。. それらを同じ位置にする方法は??
  2. ランク1は大ボス、ランク2はボス、ランク7は労働者のようなチャンピオンのタイトルを自動検出する方法??
  3. ex: あなたはポジション 6 にいますか??
4

4 に答える 4

6
$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);

if( !$result ){
  echo 'SQL Query Failed';
}else{

  $rank = 0;
  $last_score = false;
  $rows = 0;

  while( $row = mysql_fetch_array( $result ) ){
    $rows++;
    if( $last_score!= $row['point'] ){
      $last_score = $row['point'];
      $rank = $rows;
    }
    echo "rank ".$rank." is ".$row['name']." with point ".$row['point'].";
  }
}

このコードは、次のようにランキングも適切に調整します。

rank 1 is Adam Aarons with point 100
rank 2 is Barry Blue with point 90
rank 2 is Betty Boop with point 90
rank 4 is Charlie Chaplin with point 80

「チャーリー・チャップリン」は実際には 4 番目に高い得点者であるため、「ランク 3」がないことに注意してください。

この動作が望ましくない場合は、単に次のように置き換え$rank = $rows;ます$rank++;

于 2013-05-24T04:38:48.793 に答える
1

広告 1. ポイントごとにグループ化し、@curRow := \@curRow + 1 AS row_numbe を追加して、順位となる現在の行番号を選択します

ad 2. left join title_dict on row_number = title_dict.id

ここで、タイトル ディクショナリは、title_id とタイトル名ディクショナリを持つテーブルです

ad 3. select from your select on id = your id

于 2013-05-24T04:19:02.023 に答える
0

最後のスコアを保存し、インクリメントする前に現在のスコアと等しくないことを確認してください。

$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);
$i=0;
$lastscore = NULL;
while($row = mysql_fetch_array($result)) {
   if ($lastscore != $row['point']){
   $i++;
   }
   echo "rank ".$i." is ".$row['name']." with point ".$row['point'];
   $lastscore = $row['point'];
}
于 2013-05-24T04:37:02.497 に答える