2010-01-13 68 views
1

我正在使用它來收集特定用戶的評論。我想在每個頁面上顯示7條評論,並希望啓用分頁。 實施的步驟是什麼?抱歉。 n00b問題。分頁在php

$query = "SELECT msg, user_id, comment_time FROM comments WHERE aid = '$aid' ORDER BY comment_time DESC"; 
     $result = mysql_query($query) or die("ERROR: $query.".mysql_error()); 
     if (mysql_num_rows($result) > 0) { 
      while($row = mysql_fetch_object($result)){ 
       $uidval = $row->user_id; 
       if ($uidval != 0){ 
       $userInfo = $facebook->api_client->fql_query("SELECT name, pic_square_with_logo, profile_url FROM user WHERE uid='".$uidval."'"); 

      // echo '<br>Array Info<br>'; 
      // print_r($userInfo); 
      // echo '<br><br>'; 

       $nameuser = $userInfo[0]['name']; 
       $pic = $userInfo[0]['pic_square_with_logo']; 
       $profile_url = $userInfo[0]['profile_url']; 

       echo '<img src="'.$pic.'" />'; 
       echo '<a href="'.$profile_url.'">'.$nameuser.'</a>'; 
       echo '<br>'; 
       echo $row->comment_time; 
       echo '<br>'; 
       echo $row->msg; 
       echo '<br>'; 
       } 

      } 
     } 
+2

但請確保不要在ACTUAL網站中使用它!由於您發佈的SQL查詢會將您的網站暴露給XSS漏洞。 一個好的做法是使用[[PHP Doctrine Project]]作爲數據庫交互層或任何其他框架。認爲從寫作查詢開始就像學習目的一樣好。 – 2010-01-13 22:00:46

回答

4

該解決方案最好通過SQL的limit/offset子句來實現。對於MySQL,這是通過在查詢中附加LIMIT [offset] [count]來實現的。 PostgreSQL使用單獨的select ... LIMIT [count] OFFSET [offset]語法。

想法是限制返回到您要顯示的實際數量的結果數。如果您正在顯示第1頁,共200頁,並且每頁有一百個結果,它可以帶來巨大的性能提升。

當然,您需要運行第二個查詢 - 一個select count(*) from ...以確定結果集中結果的數量。除以每頁結果的數量,並得到頁數。

你可能想通過查詢字符串的網頁參數,像

http://mysite.com/index.php?page=7 

,然後用同樣的方法拉數據(考慮這個僞代碼,我知道我沒有實際查詢正確)

<?php 

$num_per_page = 20; // 20 results per page 

$page = isset($_GET['page']) ? $_GET['page'] : 0; // start from page 0 

// Build our big query minus the SELECT part here 
$from_part = 'tbl_results [where ...]"' 

$num_results = query("SELECT COUNT(*) FROM $from_part"); 

// Use ceil to round upwards 
$num_pages = ceil($num_results/$num_per_page); 

// Cap the page a the last page 
if ($page > $num_pages) 
    $page = $num_pages; 

// Cap the page at the first page 
if ($page <= 1) 
    $page = 1; 

$offset = $page * $num_per_page; 

// Build the final query to select the relevant page of data 
$results = query("SELECT * FROM $from_part LIMIT $offset, $num_per_page"); 

?> 
0

使用LIMIT x,y指示要作爲頁面拉出的記錄的第一個和數量。

3

這是你如何實現分頁的基本方法:

// Page number, >= 1, could come from $_GET for example 
$page = 1; 
// Amount of items to show on page 
$perpage = 7; 
// Calculate the index of first item to show, 
// on page 1 we obviously want to start from 0, hence the - 1 part 
$start = ($page - 1) * $perpage; 
// Build the query using those variables 
$query = "SELECT ... LIMIT $start, $perpage"; 

你當然會已通過第一檢查表項的個數和調整採取的最大和最小頁碼考慮頁面變量等,但這應該讓你開始。

0

雖然學做分頁是一個值得努力作爲一個新手,我強烈建議只使用一個已經被寫入代碼。查看PEAR,Zend Framework或任何其他庫的集合以實現分頁。

上面的例子很好地解釋了分頁是如何工作的,但完全忽略了安全實踐,可維護性以及進入生產質量代碼的其他因素。我沒有燃燒上述評論者,我說他們沒有時間爲你編寫產品質量代碼,因此不使用他們的例子(複製粘貼)。

安全性通過清理通過GET參數進入的內容和安全的數據庫抽象層在這裏非常必要。您還必須處理是否有人手動輸入超出範圍或低於範圍的值的情況。

這些天大部分上述問題都由框架(如KohanaPHP,Zend Framework,CakePHP,& c ...)處理。