
あるDBからSELECtで検索をかけて結果を
配列$resultに入れているとします。
ページングの関数を作って処理したいのですが、
このあとどのようなプログラムを書けばよいのかわかりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
ベストアンサー
PDOを使ったページャー実装のサンプルを組んでみました。
以下の例はページ内で使用するデータのみをDBから取ってくるような構造となっています。
なお、動作確認はとっていないので、細かいところは直して検証してください。
lang
1<?php 2$dsn = 'mysql:dbname=test;host=localhost'; 3$user = 'testuser'; 4$password = 'testuser'; 5$dbh = new PDO($dsn, $user, $password); 6 7//リクエストされたページ番号を取得 8$page = $_REQUEST['page']; 9 10//検索条件を取得 11$cond = $_REQUEST['cond']; 12 13//1ページに表示するデータ数を定義 14$limit = 100; 15 16//取得するデータの始めの位置を計算 17$offset = ($page - 1) * $limit; 18 19//検索条件を組成 20$where = 'where true'; 21$vals = array(); 22foreach( $cond as $k => $v ){ 23 $where .= sprintf(' and %s = ?',$k); 24 $vals[] = $v; 25} 26 27//条件に合致するデータ件数を取得 28$sql = sprintf('select count(*) as count from table %s order by id limit %d offset %d', $where, $limit, $offset); 29$stmt = $dbh->prepare($sql); 30$stmt->execute($vals); 31$result = $stmt->fetch(PDO::FETCH_ASSOC); 32$count = $result['count']; 33 34//条件に合致するデータを取得 35$sql = sprintf('select * from table %s order by id limit %d offset %d',empty($where) ? '' : $where, $limit, $offset); 36$stmt = $dbh->prepare($sql); 37$stmt->execute($vals); 38 39//最大ページ数を計算 40$max_page = ceil($count / $limit); 41 42//データ処理 43while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ 44 //データ処理を記述 45} 46 47//ページャー出力 48$condurl = ''; 49foreach($cond as $k => $v){ 50 $condurl .= sprintf('&%s=%s', $k, $v); 51} 52for($i=1; $i<=$max_page; $i++){ 53 printf('<a href="sample.php?page=%d%s">%d</a>$nbsp;', $i, $condurl, $i); 54}
投稿2015/04/10 07:59
総合スコア53
0
あるDBからSELECtで検索をかけて結果を
配列$resultに入れているとします。
ページングの関数を作って処理したいのですが、
このあとどのようなプログラムを書けばよいのかわかりません。
その順番だとべらぼうにメモリを食うので、
検索時にページングします。
SELECT * FROM hogehage
WHERE .... LIMIT c OFFSET o;
のように。(o番目からc件取得する)
ですので、PHPでは取得したレコードを全部表示するだけになります。
ブラウザからはページ番号を渡し、ページ番号n × 表示件数c = o です。
nは1ページ目の場合は0になりますので注意してください。
投稿2015/04/10 07:39

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


0
みなさん、SQL_CALC_FOUND_ROWS は使わないのですかね。
SELECT SQL_CALC_FOUND_ROWS * FROM table_name
LIMIT 0, 10;
SELECT FOUND_ROWS() as countRows
;
投稿2015/04/10 14:02

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「PHP ページング」で検索するとたくさん情報が出てきますが、具体的にどこらへんでつまずいておられますか?
https://www.google.co.jp/search?q=php+%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0
[PHP] ページング機能の仕組みとか作り方とか
http://tenderfeel.xsrv.jp/php/639/
PHPでページング処理
http://qiita.com/tabo_purify/items/fb902956c1e1a3c75041
投稿2015/04/10 07:08
総合スコア783
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/04/10 11:04