顯示廣告
隱藏 ✕
看板 layzer
作者 angelplume. (angelplume.bbs@ptt.cc)
標題 [轉寄][心得] 分享一段自己寫分頁的function
時間 2010年07月22日 Thu. PM 07:51:01


看板 PHP
作者 shadowjohn (SOMEBODY HELP ME)
標題 [心得] 分享一段自己寫分頁的function
時間 Mon Apr 16 08:57:13 2007



使用方法

一、只要給這支function資料庫的總筆數(用count去算就好了)
二、原本的select查詢,最後面加上limit ".($page*$p).",".$p;
三、在表格最後面,把function這個名字貼上
    array_page($totals_rows,$page,$p,$px,$new_Link);
四、$new_Link就是要該網頁,原本有些 $_GET 要回傳,就加在這裡...
    例如:http://localhost/test.php?mode=old   ---> 查歷史資料 $new_Link 就
                                                   給他 'mode=old'
山人覺得優點就是...
database用 limit 去限制每次查的大小,可以節省資料庫抓資料數量的負擔
用count去算database的內容也快

原本的SQL語法如...
$sql="select id,name,sex from humandata";

要改成二支
一支如第二點所說的 :
    $sql="select id,name,sex from humandata limit ".($page*$p).",".$p;
另一支就是要算筆數
    $sql="select count(*) from humandata";
或擔心二支SQL算出不用筆數,就偷懶這樣寫
    $sql="select count(*) from (原sql語法) as a ";

    接著...$totals_rows=mysql_result(mysql_query($sql),0,0);

一點點小小的心得供大家參考...也希望大家能多多指教

<?
  //自動產生分頁排序說明
  //版本1.1
  //開發者:羽山秋人
  //時間:2007414
  //第二版修正於:2007416
  //使用方法
  /* array_page(
                $totals_rows  $資料庫算出的總筆數,
                $page         $目前的頁碼常用
                $p            $每頁顯示的筆數
                $px           $每頁要顯示多少個【第 xx 頁】
                $new_Link     $跳頁用的網頁帶入值  ---> ?以後原本傳的值

                P.S:需自行在 SQL 語法最後加上 limit ".($page*$p).",".$p;
                P.S:$p、$px、$page 請加注在 檔案開頭 以上

          limit ".($page*$p).",".$p; //加在原本沒分頁的SQL語法最後(mysql only)
//要加開網頁開頭的部分-------------------start
          $p=10;  //每頁顯示5筆
          $px=5;   //每頁顯示跳頁用的5筆
                if(isset($page))
                {
                  $page=$page;
                }
                else if(isset($_GET['page']))
                {
                  $page=$_GET['page'];
                }
                else
                {
                  $page=0;
                }
//要加在網頁開頭的部分-------------------end
  */
  function array_page($totals_rows,$page,$p,$px,$new_Link)
  {
        //傳說中的分頁
        //$p=5; // 每頁顯示5筆
        //$px=5; //每頁限制最多5頁,超過就用「下5頁」上5頁
        $page_range_start=floor($page/$px)*$px;
        $page_range_end=$page_range_start+$px;
        //自動算幾頁
        $totals_page=ceil($totals_rows/$p);
        if($page_range_end>$totals_page)
        {
          $page_range_end=$totals_page;
        }
        //echo $page_range_start;
        //echo "<br>";
        //echo $page_range_end;
        //echo "<br>";
        if($page-($page%$px)>=$px)
        {
            echo "【<a href=?".$new_Link."&page=".($page-$px).">上".$px."頁</a>】             ";
        }
        if(($page-$page%$px)<$totals_page-$px)
        {
          if(($page+$px)>=$totals_page) //修正加上page的頁碼超過最終頁碼 2007/4/16
          {
            $temp=$totals_page-1;
          }
          else
          {
            $temp=$page+$px;
          }
            echo "【<a href=?".$new_Link."&page=".($temp).">下".$px."頁</a>】";
        }
        echo "<br>";
        for($i=$page_range_start;$i<$page_range_end;$i++)
        {
          if($page==$i)
            echo "【第 ".($i+1)." 頁】";
          else
            echo "【<a href=?".$new_Link."&page=".$i.">第 ".($i+1)." 頁</a>】";
        }
        echo "<br><div align=right>第【".($page+1)."】頁</div>";
        echo "合計共【".$totals_rows."】筆/共【".$totals_page."】頁";
        //分頁結束
  }
?>

--
歡樂學習農場 工作室成立
宗旨:現階段幫學生解決任何課業的疑難問題。
      挑戰叫獸任何出題~不限任何語言....GoGoGo
歡樂學習農場 論壇網址:http://3wa.myvnc.com

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.213.47
alexblue:不錯唷!! 如果用class包起來 會更好 XD!!1F 04/16 09:52
clifflu:似乎不是所有的 DB 都支援 limit 語法喔 ^^;;2F 04/16 12:03
buganini:看看adodb3F 04/16 12:20
roga:推樓上4F 04/16 15:28
shadowjohn:/_\5F 04/16 16:49
shadowjohn:剛才跟我們組長討論了一段adobc...他說效率不太好..Orz
arzbar:好處在於 任何一種DB PHP 寫法都一樣7F 04/16 18:40
shadowjohn:3Q~~~8F 04/16 22:24
buganini:彈性與速度常常是二選一的....9F 04/17 17:48
buganini:就像二退與二一......*flee*
buganini:不過個人覺得這部份速度影響不大啊..
buganini:瓶頸應該是在DB那裡而不是產生SQL
shadowjohn:還好程式碼產生器都寫好了...一行字就新改刪查Orz13F 04/18 13:02
※ 編輯: shadowjohn      來自: 220.132.135.169      (05/23 14:13)


--
※ 來源: DISP BBS 看板: layzer 文章連結: http://disp.cc/b/72-cfy
※ 看板: layzer 文章推薦值: 2 目前人氣: 0 累積人氣: 288 
分享網址: 複製 已複製
2樓 時間: 2010-07-24 14:59:43 (台灣)
超爽
  07-24 14:59 TW
對啊(爆腦)
4樓 時間: 2010-07-24 16:42:05 (台灣)
囧rz
  07-24 16:42 TW
咦 會嗎 總比C語言好多了 XD
e)編輯 d)刪除 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇