投稿者 メッセージ
<  PHPプログラミング  ~  次の10件、前の10件
Hiroaki
投稿1時間: 土 8月 11, 2007 5:15 am  引用



登録日: 2006年7月 30日
投稿記事: 8
所在地: 埼玉県

お久しぶりです。

当方、MySQLを使用したデータベースシステムを開発しております。
仕組みはいたって単純なもので、ユーザーからの要求をSQL文へ書き換え、発行し結果を表示させるだけのものです。
結果を表示させるところまでは何の問題もなく、行きました。
が、題名どおり「次の10件」、「前の10件」へのリンクをどう作ろうか迷っております。

表示用のコードは以下のようになっております。

Code:
<table border="1">
<tr><td>ID</td><td>data1</td><td>data2</td><td>data3</td><td>data4</td><td>data5</td></tr>
<?php
   $limit = 10;//10件まで
   for($i = 1; $i <= $limit; $i++){
      $line = mysql_fetch_array($res);
?>
   <tr>
   <td><?php echo $i;?></td>
   <td><?php echo $line['dat1']; ?></td>
   <td><?php echo $line['dat2']; ?></td>
   <td><?php echo $line['dat3']; ?></td>
   <td><?php echo $line['dat4']; ?></td>
   <td><?php echo $line['dat5']; ?></td>
   </tr>
   
<?php
      if($i == $rows){// 検索結果が$limit以下。
         break;
      }
   }
?>


SQLのデータの方は、単純に data1,data2,data3.data4,data5と入っており、データ順を示す番号は登録されておりません。

このような場合、次の10件などのリンクを表示させるためにはどうしたらいい物でしょうか?

ご教授願えると幸いです。

_________________
まだまだPHP初心者。
よろしくお願いします。
トップに移動
ユーザー情報を表示 メッセージを送信
大嶺
投稿1時間: 月 8月 13, 2007 7:05 pm  引用



登録日: 2007年8月 08日
投稿記事: 5
所在地: 愛知県名古屋市

LIMIT CLAUSE 使って。

たとえば

SELECT field1, field2, FROM table_name LIMIT 0,10;


LIMIT 0,10 [ LIMIT A, B ]

A -> 初め [start point]
B -> 量

0 から、10の量
Code:
SELECT field1, field2, FROM table_name LIMIT 0,10;



11 から、10の量
Code:
SELECT field1, field2, FROM table_name LIMIT 11,10;

_________________
まだまだ。馬鹿外人。。。
トップに移動
ユーザー情報を表示 メッセージを送信 メールを送信 ウェブサイトに移動 MSN メッセンジャー
yuya
投稿1時間: 日 9月 23, 2007 1:47 pm  引用



登録日: 2007年9月 23日
投稿記事: 3
所在地: Tokyo

ページング処理をする時は、次へ、前への他に、カレントページから上下5件ずつリンクをだしたり、最初に戻るや、最後に行く。などいろいろなリンクをつけたくなったりすると思います。

そんな時に必要な数値データは、
・全体のヒット件数
・1ページに表示する件数
・現在何ページ目を閲覧しているか
があればどんなページング処理でもおそらく可能かと思います!たぶん。。。

具体的には、まずはデータベースから全体の件数を取得します。

Code:
$sql = select count(プライリkeyなど) form table_name;
$res = mysql_query($sql);
   if($res){
   $temp = mysql_fetch_row($res);
   $total_number = $temp[0];
   }
//1ペ-ジに表示する数
$page_num = 10;
//分割ペ-ジの算出
$total_pages = (INT)(($total_number + ($page_num - 1)) / $page_num);
//ゲットにてカレントペ-ジを取得
if(is_numeric($_GET['page'])){
   $current_page = $_GET['page'];
}else{
   $current_page = 1;
}
//ペ-ジ番号から実際のクエリ件数を算出
$start = (INT)(($current_page - 1) * $page_num);
$end = (INT)$page_num;
//実際ペ-ジに出力するデ-タをクエリ
$sql = "select * from table_name limit $start,$end";
$res = mysql_query($sql);
   if($res){
   $count = 0;
      while($temp[$count] = mysql_fetch_assoc($res)){
      $count++;
      }
   }
var_dump($temp);


ページングを吐き出す時はこんな感じです。
Code:
<div class="paging">
<?php
echo '総数 '.$total_number.'件';
if($total_pages > 1){
$start = ($current_page - 5);
   if($start < 1){
   $start = 1;
   }
$end = ($current_page + 5);
   if($end > $total_pages){
   $end = $total_pages;
   }
//ペ-ジングの吐き出し
echo '<p style="text-align:right;">';
   if($page > 1){//次ぎへを追加
   echo '<a href="?page='.($page - 1).'">前へ</a> |';
   }
   for($i=$start;$i<=$end;$i++){
      if($page == $i){
      echo '<b>'.$i.'</b>  |';
      }else{
      echo '<a href="?page='.$i.'">'.$i.'</a>  |';
      }
   }
   if(($page + 1) <= $total_pages){//次ぎへを追加
   echo ' <a href="?page='.($page + 1).'">次へ</a>';
   }
echo '</p>';
}
?>
</div>



動作確認しませんが、たぶんいけるはずです!

_________________
yuya
トップに移動
ユーザー情報を表示 メッセージを送信 メールを送信 AIMアドレス Yahoo メッセンジャー MSN メッセンジャー
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.