2

スコアボード(whileループ)を作成し、フェッチした結果を特定の数値フィールド(ポイント)で並べ替える方法を実現しようとしました。しかし、私が達成する必要があるのは次のようなものです

rank----username--point
1st------test-----------3200
2nd-----test2---------1200

など。結果をページ分割し、1ページあたり25件の結果に制限します。次のようにwhileループを試しました

while($row = mysql_fetch_array($query) || $i<=$totalnumberofrows ){
   echo out the results
$i++
}

これは完全に1から25までの番号ですが、一方、2ページでは1から25までの番号が付けられています。私が達成する必要があることを達成するためのトリックはありますか?つまり、ページ付けされている場合でも、1から(行の総数)までの連続した番号付け。

4

3 に答える 3

2

探しているのは、MySQL LIMIT ステートメントです。たとえば、次のクエリは、エントリ 0 ~ 24 (つまり、データベースの最初の 25 エントリ) を返します。

SELECT * FROM entries ORDER BY `points` LIMIT 0, 25

2 番目のページ (次の 25 エントリ) を取得したい場合は、次のようにします。

SELECT * FROM entries ORDER BY `points` LIMIT 25, 25

ここで注意すべき最も重要なことは、最初の引数は開始する行であり、2 番目の引数は最後の行ではなく、返される行の合計量であるということです。

開始点を決定するには、最初のページの番号が 1 であると仮定して、単純に (($page_number - 1) * 25) を実行します。たとえば、次のように実行できます。

<?php
$start = (($page_number - 1) * 25);
$query = "SELECT * FROM entries ORDER BY `points` LIMIT {$start}, 25";
// ... rest of your code goes here ...
?>
于 2012-04-14T01:25:38.383 に答える
1

2ページ目(私の例では)の各ページの数に25を追加するだけです - 3ページ目に25を追加します - 50を追加します...

$page = 2;
while($row = mysql_fetch_array($query) || $i<=$totalnumberofrows ){
   echo out the results
   echo (($page-1)*$totalnumberofrows)+$i;
   $i++
}
于 2012-04-14T01:22:49.480 に答える
0

ページ番号とオフセットがわかっている場合は、次のことができるはずです

$rank = $offset * $page_number;
于 2012-04-14T01:22:21.900 に答える