2013-04-11 140 views
1

Thanx爲您的早期反應和建議。SQL搜索結果和分頁

請耐心等待,因爲我還沒有很好地歸於PHP MySQL編程。

我的搜索工作得很好,除了兩個問題如下:

  1. 默認情況下,我想查詢返回WHERE C_ID> 0時,該頁面被訪問的所有記錄。主鍵是c_id。目前,當我訪問它時,頁面不顯示任何記錄。直到我將這個條件添加到保存爲外鍵數值的分類標準之前,情況並非如此:

    AND cat_id ='「。$ cat_id。」 '

  2. 此外,我希望能夠分頁搜索結果。我正在閱讀一些帖子,並提到了將鏈接添加搜索詞。我不知道應該如何處理像我這樣的多重標準。當我按照標準完成搜索後點擊下一個按鈕時,我當前的分頁將返回所有記錄。

這裏是整個代碼,我有:

搜索頁面:

<?php 

$ctitle = mysql_real_escape_string($_POST['ctitle']); 
$csubject = mysql_real_escape_string($_POST['csubject']); 
$creference = mysql_real_escape_string($_POST['creference']); 
$cat_id = ($_POST['cat_id']); 
$cmaterial = mysql_real_escape_string($_POST['cmaterial']); 
$ctechnic = mysql_real_escape_string($_POST['ctechnic']); 
$cartist = mysql_real_escape_string($_POST['cartist']); 
$csource = mysql_real_escape_string($_POST['csource']); 

$sql = "SELECT * FROM collections WHERE c_id>0 AND `ctitle` LIKE '%".$ctitle."%' AND `csubject` LIKE '%".$csubject."%' AND `creference` LIKE '%".$creference."%' AND `cat_id` LIKE '%".$cat_id."%' AND `cmaterial` LIKE '%".$cmaterial."%' AND `ctechnic` LIKE '%".$ctechnic."%' AND `cartist` LIKE '%".$cartist."%' AND `csource` LIKE '%".$csource."%' ORDER BY c_id ASC"; 

$sql_result = mysql_query ($sql, $connection) or die ('request "Could not execute SQL query" '.$sql); 

// pagination code 
    $PAGING=new PAGING($sql); 

// There are two optional parameters as well: 
// $records = 16 //Number of records to be displayed per page 
// $pages = Number of pages to be displayed in the paging 
    $sql=$PAGING->sql; 

if (mysql_num_rows($sql_result)>0) { 

// The following line gives us an SQL statement with appropriate limits applied 
    $sql_result=mysql_query($sql) or die($sql." - ".mysql_error()); 

    while ($row = mysql_fetch_assoc($sql_result)) { 
    $c_id=$row['c_id']; 
?> 

search results ..................... 

<?=$PAGING->show_paging("gallery.php")?> 

而且你可能也想看看尋呼類我使用:

<?php 
/************************************************ 
* ======================================== * 
* Perfect MySQL Paging      * 
* ======================================== * 
* Script Name: class.paging.php    * 
* Developed By: Khurram Adeeb Noorani   * 
* Email: [email protected]    * 
* My CV: http://www.visualcv.com/kanoorani * 
* Twitter: http://www.twitter.com/kanoorani * 
* Date Created: 08-JULY-2009     * 
* Last Modified: 08-JULY-2009     * 
************************************************/ 
?> 
<?php 
class PAGING 
{ 
    var $sql,$records,$pages; 
    /* 
    Variables that are passed via constructor parameters 
    */ 
    var $page_no,$total,$limit,$first,$previous,$next,$last,$start,$end; 
    /* 
    Variables that will be computed inside constructor 
    */ 
    function PAGING($sql,$records=24,$pages=4) 
    { 
     if($pages%2==0) 
      $pages++; 
     /* 
     The pages should be odd not even 
     */ 
     $res=mysql_query($sql) or die($sql." - ".mysql_error()); 
     $total=mysql_num_rows($res); 
     $page_no=isset($_GET["page_no"])?$_GET["page_no"]:1; 
     /* 
     Checking the current page 
     If there is no current page then the default is 1 
     */ 
     $limit=($page_no-1)*$records; 
     $sql.=" limit $limit,$records"; 
     /* 
     The starting limit of the query 
     */ 
     $first=1; 
     $previous=$page_no>1?$page_no-1:1; 
     $next=$page_no+1; 
     $last=ceil($total/$records); 
     if($next>$last) 
      $next=$last; 
     /* 
     The first, previous, next and last page numbers have been calculated 
     */ 
     $start=$page_no; 
     $end=$start+$pages-1; 
     if($end>$last) 
      $end=$last; 
     /* 
     The starting and ending page numbers for the paging 
     */ 
     if(($end-$start+1)<$pages) 
     { 
      $start-=$pages-($end-$start+1); 
      if($start<1) 
       $start=1; 
     } 
     if(($end-$start+1)==$pages) 
     { 
      $start=$page_no-floor($pages/2); 
      $end=$page_no+floor($pages/2); 
      while($start<$first) 
      { 
       $start++; 
       $end++; 
      } 
      while($end>$last) 
      { 
       $start--; 
       $end--; 
      } 
     } 
     /* 
     The above two IF statements are kinda optional 
     These IF statements bring the current page in center 
     */ 
     $this->sql=$sql; 
     $this->records=$records; 
     $this->pages=$pages; 
     $this->page_no=$page_no; 
     $this->total=$total; 
     $this->limit=$limit; 
     $this->first=$first; 
     $this->previous=$previous; 
     $this->next=$next; 
     $this->last=$last; 
     $this->start=$start; 
     $this->end=$end; 
    } 
    function show_paging($url,$params="") 
    { 
     $paging=""; 
     if($this->total>$this->records) 
     { 
      $page_no=$this->page_no; 
      $first=$this->first; 
      $previous=$this->previous; 
      $next=$this->next; 
      $last=$this->last; 
      $start=$this->start; 
      $end=$this->end; 
      if($params=="") 
       $params="?page_no="; 
      else 
       $params="?$params&page_no="; 
      $paging.="<ul class='paging'>"; 
      $paging.="<li class='paging-current'>Page $page_no of $last</li>"; 
      if($page_no==$first) 
       $paging.="<li class='paging-disabled'><a href='javascript:void(0)'>&lt;&lt;</a></li>"; 
      else 
       $paging.="<li><a href='$url$params$first'>&lt;&lt;</a></li>"; 
      if($page_no==$previous) 
       $paging.="<li class='paging-disabled'><a href='javascript:void(0)'>&lt;</a></li>"; 
      else 
       $paging.="<li><a href='$url$params$previous'>&lt;</a></li>"; 
      for($p=$start;$p<=$end;$p++) 
      { 
       $paging.="<li"; 
       if($page_no==$p) 
        $paging.=" class='paging-active'"; 
       $paging.="><a href='$url$params$p'>$p</a></li>"; 
      } 
      if($page_no==$next) 
       $paging.="<li class='paging-disabled'><a href='javascript:void(0)'>&gt;</a></li>"; 
      else 
       $paging.="<li><a href='$url$params$next'>&gt;</a></li>"; 
      if($page_no==$last) 
       $paging.="<li class='paging-disabled'><a href='javascript:void(0)'>&gt;&gt;</a></li>"; 
      else 
       $paging.="<li><a href='$url$params$last'>&gt;&gt;</a></li>"; 
      $paging.="</ul>"; 
     } 
     return $paging; 
    } 
} 
?> 

提前感謝您的幫助。

回答

1

範圍導致

實例:

SELECT * FROM `your_table` LIMIT 0, 10 

這將顯示從數據庫中的第10個結果。

SELECT * FROM `your_table` LIMIT 5, 5 

這將顯示記錄6,7,8,9,和10

這是你問的是什麼呢?

+0

不是。我認爲LIMIT已經在分頁類中設置爲:function PAGING($ sql,$ records = 24,$ pages = 4)。我的問題是無法瀏覽我的搜索結果。 – 2013-04-11 13:36:22

+0

我得到的印象是,想要取消這種方法,因爲它需要執行和檢索整個表格,然後處理代碼 - 我也同意在這種情況下進行查詢更好。 – 2013-04-11 13:39:07

+0

你有沒有在查詢之前回應'cat_id' - 或者更好地回顯整個查詢並看到它們如預期的那樣? – 2013-04-11 13:46:10