【问题标题】:MySQL pagination with search function, mysql_num_rows or mysql_fetch row?带有搜索功能的 MySQL 分页,mysql_num_rows 还是 mysql_fetch 行?
【发布时间】:2012-10-31 10:21:28
【问题描述】:

我正在为这段代码自食其力。在我继续之前,我真的不希望代码被重写,只是帮助我找到正确的方向,因为我迷路了^^

这就是我用来查询列表的代码。 $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,现在这是不可能的......

我完全被困在这里了。欢迎任何帮助!!!

谢谢。

编辑:31-10-2012 - 11:50

好的,我找到了。我需要对 $customerlistquery 使用 SELECT COUNT(*) 并将 ...($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 )

不确定我在做什么,需要一点时间来告知我的进度,然后 cmet 变得无关紧要..

【问题讨论】:

    标签: php mysql pagination search-engine rows


    【解决方案1】:

    你为什么不那样调试

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

    并查看您的 $record

    【讨论】:

    • 是的。我真傻。但是通过在phpmyadmin中运行查询发现了问题。现在我只需要在我的记录字段中放置一个 COUNT(*) 作为 (table1) (对于所有记录)。现在弄清楚了,那么它应该可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多