2011-06-13 60 views
-1

*編輯***分頁幫助

我已經通過組合從分頁查詢一些變量拉電波,並最終得到了分頁工作主要查詢取得了很大進展。現在唯一的問題是,第一頁是空白的,第二頁是正確的使用結果41-80

這裏開始,將查詢範圍和拉電波

 $rowsperpage = 40; 
     $currentpage = (int) $_GET['currentpage']; 
     $offset = ($currentpage - 1) * $rowsperpage; 
     $query = "SELECT * FROM `CysticAirwaves` WHERE `FromUserID` = `ToUserID` AND `status` = 'active' ORDER BY `date` DESC, `time` DESC LIMIT $offset, $rowsperpage" ; 
     $request = mysql_query($query,$connection); 
     $counter = 0; 
     while($result = mysql_fetch_array($request)) { 

這裏是分頁代碼:

$query = "SELECT COUNT(*) FROM `CysticAirwaves`"; 
         $result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR); 
         $r = mysql_fetch_row($result); 
         $numrows = $r[0]; 

         // number of rows to show per page 
         $rowsperpage = 40; 
         // find out total pages 
         $totalpages = ceil($numrows/$rowsperpage); 

         // get the current page or set a default 
         if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { 
          // cast var as int 
          $currentpage = (int) $_GET['currentpage']; 
         } else { 
          // default page num 
          $currentpage = 1; 
         } // end if 

         // if current page is greater than total pages... 
         if ($currentpage > $totalpages) { 
          // set current page to last page 
          $currentpage = $totalpages; 
         } // end if 
         // if current page is less than first page... 
         if ($currentpage < 1) { 
          // set current page to first page 
          $currentpage = 1; 
         } // end if 

         // the offset of the list, based on current page 
         $offset = ($currentpage - 1) * $rowsperpage; 

         // get the info from the db 
         $query2 = "SELECT `id` FROM `CysticAirwaves` LIMIT $offset, $rowsperpage"; 
         $result = mysql_query($query2, $connection) or trigger_error("SQL", E_USER_ERROR); 

         // while there are rows to be fetched... 
         while ($list = mysql_fetch_assoc($result)) { 
          // echo data 
          echo $list['id'] . " : " . $list['number'] . "<br />"; 
         } // end while 

         /****** build the pagination links ******/ 
         // range of num links to show 
         $range = 3; 

         // if not on page 1, don't show back links 
         if ($currentpage > 1) { 
          // show << link to go back to page 1 
          echo " <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=1'><<</a> "; 
          // get previous page num 
          $prevpage = $currentpage - 1; 
          // show < link to go back to 1 page 
          echo " <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$prevpage'><</a> "; 
         } // end if 

         // loop to show links to range of pages around current page 
         for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) { 
          // if it's a valid page number... 
          if (($x > 0) && ($x <= $totalpages)) { 
           // if we're on current page... 
           if ($x == $currentpage) { 
           // 'highlight' it but don't make a link 
           echo " [<b>$x</b>] "; 
           // if not current page... 
           } else { 
           // make it a link 
           echo " <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$x'>$x</a> "; 
           } // end else 
          } // end if 
         } // end for 

         // if not on last page, show forward and last page links   
         if ($currentpage != $totalpages) { 
          // get next page 
          $nextpage = $currentpage + 1; 
          // echo forward link for next page 
          echo " <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$nextpage'>></a> "; 
          // echo forward link for lastpage 
          echo " <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$totalpages'>>></a> "; 
         } // end if 
         /****** end build pagination links ******/ 
         ?> 

所以長話短說,我只是我不能拉頭40倍的結果,但之後,其精

+3

什麼不工作? – 2011-06-13 23:19:25

+1

你有什麼確切的問題? 「[仍然](http://stackoverflow.com/questions/6287209/how-to-implement-final-steps-in-pagination-project)無法」太模糊,以幫助你。 – deceze 2011-06-13 23:20:25

+0

你寫這是另一種方法。前一個是什麼?實際上你的問題是什麼?你剛剛說過你一般都會寫代碼,所以你在尋找一個編碼器嗎? – hakre 2011-06-13 23:21:14

回答

2

這是一個更好的方式去paginat離子:

SELECT SQL_CALC_FOUND_ROWS id FROM `CysticAirwaves` LIMIT $offset, $rowsperpage 

選擇數據要使用例如上面的查詢將返回相同的結果你QUERY2

然後執行另一個SQL查詢顯示:

SELECT FOUND_ROWS() 

這將返回沒有使用限制的行數。查看更多在這裏:

http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html

這是管理分頁的最快方式。

然後,您將循環查看第一個查詢的結果並顯示。您需要跟蹤的是您所在的頁面以及每頁顯示多少行。

如果您的頁碼* $ rowsperpage>第二次選擇(FOUND_ROWS)的結果,那麼您不需要計算或顯示'下一頁'選項/鏈接。

對於'下一個'頁面,循環3次遞增頁碼或下一頁* $ rowsperpage>總行數。

對於'上一頁',循環3次遞減頁碼或上一頁= 1(在這種情況下突破循環)。

這應該做的伎倆。

0

可能你的代碼太多了,很難閱讀你曾經寫過的東西。您似乎在每行代碼旁邊都有註釋,這可能會強調這一點。所以你可能應該減少代碼來減少這個問題。

這只是一個建議,你寫道:

 // if current page is greater than total pages... 
     if ($currentpage > $totalpages) { 
      // set current page to last page 
      $currentpage = $totalpages; 
     } // end if 
     // if current page is less than first page... 
     if ($currentpage < 1) { 
      // set current page to first page 
      $currentpage = 1; 
     } // end if 

所有這些,如果你需要處理的條款!所有這些評論閱讀!這不是一種負擔嗎?

 // currentpage must be within 1 and total of pages. 
     $currentpage = max(1,min($totalpages, $currentpage)); 

那怎麼樣?如果你有理解它的問題,你可以在上面放一些評論來解釋它,就像你在代碼中做的一樣 - 用你的話說,如果我的不合適,這只是一個建議。