0

スコアページのロジックは次のようになります。

  • すべてのプレーヤー間の現在のユーザーの順序(#115など):すべてのユーザーのMySql SELECT ORDER BYスコアDESCを実行してから、現在のユーザーがどこにいるかを確認しますか?

  • より良い2つのスコア:現在のユーザーを取得してからSELECT LIMIT2WHEREスコア>"$currentuserscore"?

  • 2つ未満のスコア:現在のユーザーを取得してから、SELECT LIMIT 2WHEREスコア<"$currentuserscore"?

これは非常にバグがあると思いますが、他に方法はありますか?

4

1 に答える 1

1

オプション1の場合:

select count(1) as count from users where score>=$user_score

これはあなたにその人のランクを与えるはずです。>=現在のユーザーと同じスコアを持つ複数のユーザーがをaに変更することを心配している場合は>、結果に1を追加できます。

オプション2および3の場合:

select * from users where score>$user_score order by score asc limit 2

select * from users where score<$user_score order by score desc limit 2

または、最初のクエリからランクを取得したら、1つのクエリで5つすべて(前に2つ、後に2つ、現在のユーザー)を取得できます。

$start = $user_rank - 2;
$query = "select * from users order by score asc limit {$start},5";

または、現在のユーザーまたは現在のユーザーと同じスコアのユーザーを含めたくない場合は、次のようにすることができます。

$start = $user_rank - 2;
$query = "select * from users where score!=$user_score order by score asc limit {$start},4";
于 2013-01-11T18:20:35.780 に答える