2012-10-31 33 views
1

我正在吃自己一段時間關於這段代碼。在繼續之前,我真的不希望代碼被重寫,只是幫助我走向正確的方向,因爲我迷路了^^MySQL分頁與搜索功能,mysql_num_rows或mysql_fetch行?

所以這是我用來查詢列表的代碼。 $ showitemsperlist可以設定我的用戶,這表明應每頁顯示許多物品..

if (isset($_GET["page"])) 
{ 
$page = $_GET["page"]; 
} 
else 
{ 
$page=1; 
}; 
$start_from = ($page-1) * $showitemsperlist; 

// THIS SECTION IS THE 'search' section. Items are shown according to user input. 
if(isset($_POST['search'])) 
{ 
    $search = $_POST['search']; 
    $terms = explode(" ", $search); 
    $customerlistquery = " 
    SELECT * 
    FROM customer 
    LEFT JOIN company 
    ON customer.compid=company.compid 
    WHERE 
    "; 
    $i = 0; 
    foreach ($terms as $each) 
    { 
     if ($i++ > 0) 
     $customerlistquery .= ' OR '; 

     $customerlistquery .= "concat(custsurname, custforename, custmidname, custpostal, custphone1, custphone2, custfax, custnamecode) LIKE '%$each%' "; 
    } 
    $customerlistquery .= " ORDER BY $orderby ASC LIMIT $start_from, $showitemsperlist" ; 

} 
else 
// IF NOT SEARCHING, JUST SHOW EVERYTHING. 
{ 
    $customerlistquery = " 
      SELECT * 
      FROM customer 
      LEFT JOIN company 
      ON customer.compid=company.compid 
      ORDER BY $orderby 
      ASC LIMIT $start_from, $showitemsperlist 
      "; 
} 

// EXECUTE QUERY: 
$result=mysql_query($customerlistquery) or die("query fout " . mysql_error()); 

的查詢工作以及所有,但低於此我使用此代碼行數頁:

$sql = "SELECT COUNT(custid) FROM customer"; 
$rs_result = mysql_query($sql); 
$row = mysql_fetch_row($rs_result); 
$total_records = $row[0]; 
$total_pages = ceil($total_records/$showitemsperlist); 
echo "<p id='pagination'>"; 
if ($total_pages < 2) 
{ 
    echo "<br/>"; 
} 
else 
{ 
    echo "Page: "; 
    for ($i=1; $i<=$total_pages; $i++) 
    { 
     echo "<a href='crm_custlist.php?page=".$i."' id='pagination'>".$i."</a>"; 
    } 
} 
echo "</p>"; 

我在這裏看到1個問題,那就是執行'搜索'功能時的$ sql。如果我沒有執行'搜索',我確實會得到頁面鏈接,當我不'搜索'時,我也得到它們,因爲它是靜態的...不適應'搜索'查詢。

所以我試圖改變$ rs_result = mysql_query($ sql); ...($ customerlistquery),因爲它應該計算在那裏找到的結果,但是這給了我更多的頁面比它應該!

接下來我嘗試將fetch_row更改爲num_rows,它返回ASC限制之間的差異,所以這沒有幫助。

所以我需要統計總的結果,不能是別的。

我真的不明白:

$sql = "SELECT COUNT(custid) FROM customer"; 
$rs_result = mysql_query($sql); 
$row = mysql_fetch_row($rs_result); 
$total_records = $row[0]; 

返回27個值。 SELECT(custid)FROM customer也返回了27個值...所以我找到了答案。我需要以某種方式在$ customerlistquery中添加一個COUNT(custid)字段,該字段返回總金額並可用作$ total_records。 (至少我認爲我想通了。)

最好的選擇是mysql_num_rows返回發現的總記錄,但現在這是不可能的,因爲ASC LIMIT的...

我完全卡在這裏。任何幫助,歡迎!

Thanx。

編輯:31-10-2012 - 11:50

好的,我發現了。我需要使用SELECT COUNT(*)作爲$ customerlistquery,並使用以下代碼替換...($ sql):$ rs_result = mysql_query($ customerlistquery);.

這將返回我需要的值。但是現在我想要回顯的所有字段都是未定義索引。

使用下面這些行定義索引...用SELECT 合作,而不是與SELECT COUNT():

while($record=mysql_fetch_array($result)) 
{ 
$custid=$record['custid']; 
$compid=$record['compid']; 
$compname=$record['compname']; 
$custsurname=$record['custsurname']; 

編輯:31-10-2012 - 12:06

現在非常接近!試圖添加一個新的表格行(COUNT(*)到我的$ customerlistquery ... 嘗試一切^^很快它會工作......我希望。

SELECT * 
FROM customer 
LEFT JOIN company 
ON customer.compid=company.compid 
WHERE 
(SELECT COUNT(*) 
    FROM customer) 

不知道我在做什麼,需要一點時間剛剛通知我的進步之前的評論變得無關緊要..

回答

1

你爲什麼不調試像

while($record=mysql_fetch_array($result)) { 
echo '<pre>"; 
print_r($record); 
echo "</pre>"; 
} 

和看到你的$記錄

+0

是。我很愚蠢。但通過在phpmyadmin中運行查詢發現問題。現在我只需要將COUNT(*)作爲(table1)放入我的記錄字段(對於所有記錄)。現在想出來,那麼它應該可能工作。 –