Php 带搜索功能的MySQL分页、MySQL_num_行还是MySQL_fetch行?
我有一段时间对这段代码感到厌烦。在我继续之前,我真的不希望代码被重写,只要帮我找到正确的方向,因为我迷路了^^ 这就是我用来查询列表的代码$showitemsperlist可由用户设置,显示每页应显示的许多项目Php 带搜索功能的MySQL分页、MySQL_num_行还是MySQL_fetch行?,php,mysql,pagination,search-engine,rows,Php,Mysql,Pagination,Search Engine,Rows,我有一段时间对这段代码感到厌烦。在我继续之前,我真的不希望代码被重写,只要帮我找到正确的方向,因为我迷路了^^ 这就是我用来查询列表的代码$showitemsperlist可由用户设置,显示每页应显示的许多项目 if (isset($_GET["page"])) { $page = $_GET["page"]; } else { $page=1; }; $start_from = ($page-1) * $showitemsperlist; // THIS SECTION
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>";
返回27个值。从customer中选择(custid)也会返回27个值…所以我算出了。我需要在$customerlistquery中增加一个COUNT(custid)字段,它返回总金额,可以用作$total\u记录。(至少我想我知道了。)
最好的选择是使用mysql_num_rows返回找到的总记录,但由于ASC限制,现在这是不可能的
我完全被困在这里了。欢迎任何帮助
塔克斯
编辑:31-10-2012-11:50
好的,我找到了。我需要对$customerlistquery使用SELECT COUNT(*),并将…($sql)替换为:$rs\u result=mysql\u query($customerlistquery)
这将返回我确实需要的值。但是现在我要回显的所有字段都是未定义的索引
使用以下几行定义索引…使用SELECT,而不是SELECT COUNT():
编辑:31-10-2012-12:06
非常接近!正在尝试向我的$customerlistquery添加一个名为COUNT(*)的新表行。。。
尝试一切^^^很快就会成功的…我希望
SELECT *
FROM customer
LEFT JOIN company
ON customer.compid=company.compid
WHERE
( SELECT COUNT(*)
FROM customer )
不确定我在做什么,需要一点时间在评论变得无关紧要之前通知我的进度。为什么不这样调试
while( $record=mysql_fetch_array($result) ) {
echo '<pre>";
print_r($record);
echo "</pre>";
}
while($record=mysql\u fetch\u array($result)){
回声';
打印(记录);
回声“;
}
看看你的$record你为什么不那样调试
while( $record=mysql_fetch_array($result) ) {
echo '<pre>";
print_r($record);
echo "</pre>";
}
while($record=mysql\u fetch\u array($result)){
回声';
打印(记录);
回声“;
}
并查看您的$recordTrue。我真蠢。但是通过在phpmyadmin中运行查询发现了问题。现在我只需要在我的记录字段(对于所有记录)中放置一个计数(*)(表1)。现在弄清楚这一点,它可能会起作用。我真蠢。但是通过在phpmyadmin中运行查询发现了问题。现在我只需要在我的记录字段(对于所有记录)中放置一个计数(*)(表1)。现在弄清楚这一点,它可能会起作用。
while( $record=mysql_fetch_array($result) ) {
echo '<pre>";
print_r($record);
echo "</pre>";
}