ホームページ  >  記事  >  バックエンド開発  >  現在の ID が存在するページを見つけます。

現在の ID が存在するページを見つけます。

WBOY
WBOYオリジナル
2016-06-23 13:22:091059ブラウズ

フィールド ID: 値 1~27
ページング時: 1 ページあたり 8 つのデータが表示されます
ID を指定して、この ID が位置するページの数を見つけます

私のアイデア:

$arr=array();for(int i=0;i<maxpage;i++){$sql=(select id from table limit i*8,(i+1)*8);  $arr[$i]+=$this->db->getAll($sql);}$arr={[0]=>(1~8)[1]=>(9~16)[2]=>(17~24)[3]=>(25~27)}让id 与数组$arr的value 比较 ,相同的话 获取出 key后+1就是它所在的页面




ディスカッションへの返信(解決策)

idが連続していると仮定し、idの昇順にページを生成すると、

$pagenumber = ceil($id / 8);

idが連続していると仮定

$pagenumber = ceil($id / 8);
$pagenumber = ceil($id / 8);


id が連続していない場合、ユーザーはデータを削除するか、
がどこにあるかによってフィルタリングされる可能性があります継続的ではないですか?次に、ID の分布を知る必要があります

不連続ですか?次に、ID の分布を知る必要があります

ID の分布は不連続です

または、データベース内のすべての ID を見つけて値を比較し、キーを取得してから ceil((key+1)/ 8) は、そのページの数です
データが多いと非常に遅くなります

IDを与えて、不連続なIDの中から正の順序でこのIDが位置するページの番号と位置を見つけます(各ページが X に分割されていると仮定します)

1: Known id=5 id{1,2,5,9,10}, X=2 この場合、既知の ID は 2 ページ目の最初の位置になります
2 : 既知の ID=9 id{1,2,3, 7,9,10} X=2 すると、既知の ID は 3 ページ目の最初の位置になります


これは、すべての ID を取り出すことによってのみ行うことができます。 そしてそれらを順番に番号付けし、


そして指定された ID 番号を取得します、
$pagenumber = ceil( $number / 8);

ID が次の場合、

//已知id=5   id{1,2,5,9,10},  X=2   那么 已知id在第二页的第一个位置$id = 5;$a = array(1,2,5,9,10);$x = 2;$p = array_search($id, $a);echo ceil($p / $x) + 1; //2//已知id=9   id{1,2,3,7,9,10}  X=2  那么  已知id在第三页的第一个位置$id = 9;$a = array(1,2,5,9,10);$x = 2;$p = array_search($id, $a);echo ceil($p / $x) + 1; //3
を計算するのは簡単です。順不同ですが、
$id = 9;$a = array(1,5,9,2,10);$x = 2;$p = array_search($id, $a);echo ceil($p / $x) + 1; //2
を計算することもできます

これは、すべての ID を取り出し、

順番に番号を付け、


指定された ID の番号を取得することによってのみ実行できます、
$pagenumber = ceil($数値/8);

データが多い場合は、この方法は適していません

または、最初のページを検索します。最初の ID を取得します。 id. ページ数を確認します。

これは、すべての ID を取得することによってのみ実行できます。

次に、指定された ID の番号を取得します。
$pagenumber = ceil( $数値 / 8);


データが多い場合、この方法は適していません

または、最大のページ、最初のページ ~ 最大のページを見つけることができます 最初の ID を取得します 既知の ID と最初の ID を比較しますページ数


重要なのは、ID が不連続であることです。各ページの最初の ID が何であるかをどうやって知ることができますか?
連番も必要ですが、もう少し簡単で、0を選択〜IDを指定するだけでOKです



IDセクションについて1.最初のページから全てのIDを一括でクエリします

2.最大のページに移動します

最初のページの最初の ID が <既知の ID であるかどうかを判断します。はいの場合、2 番目のページの最初の ID が <既知の ID であるかどうかを確認します。方法は少ないようですが、データベースを使用する回数が多くなります
最初に1つの関数を使用して作成する方が良いです。良い方法があれば、教えて参考にさせてください



したいので。データベースにクエリを実行します。これを実行できます

select id, ceil(@s/每页行数) as page, @s:=@s+1 from 表, (select @s:=1) t HAVING id=$id
クエリ結果のページ列は、ID に対応するページ番号です

問題があります。これが正しい方法です

select id, page   from (select id, ceil(@s/每页行数) as page, @s:=@s+1 from 表, (select @s:=1) t ) t1  where id=$id


問題があります、これは正しい方法

select id, page   from (select id, ceil(@s/每页行数) as page, @s:=@s+1 from 表, (select @s:=1) t ) t1  where id=$id


@ 一般的に自分で定義した変数を表すために使用されます

":= "主に外部パラメータを渡したり、ステートメント内の変数に値を割り当てるために使用されます


@s:=@s+1 @s: =1 変数の代入を 2 回行っていますか

(select @s:=1) t) t1 t,t1 は読みませんでした

この技術的な書き方はあなたの理解度に依存します
通常の書き方は
set @s:=1;select id, ceil(@s/每页行数) as page, @s:=@s+1 from 表
です
ただし、 SQL 攻撃を防ぐため、PHP では 2 つ以上の命令を同時に実行することができないため、デカルト接続が使用されます
(select @s:=1) は、ユーザー変数 @ に初期値を割り当てるだけです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。