【问题标题】:Code not working, Sorting MySQL results into pages代码不起作用,将 MySQL 结果排序到页面中
【发布时间】:2012-09-01 14:48:39
【问题描述】:

好的,我得到了这个代码,它假设从我的数据库中带回我的所有结果并每页显示 5 个结果。目前我的数据库中有 12 个结果,它只显示 10 个,它不会显示第 3 页,因为没有 5 个结果要显示。这是我的代码

//$_GET['page'] is to get the current page opened
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
$results_per_page = "5"; //number of results I want displayed per page
$start_from = ($page-1) * $results_per_page; 
$query = "SELECT * FROM items WHERE subcat = '$conditions' LIMIT $start_from, $results_per_page";
$result = mysql_query($query) or die("Unable to verify user because : " . mysql_error());
while ($row_condition=mysql_fetch_array($result)) {
   //Display the results here
}

//Count number of results from database and work out how
//many pages I need to display all the results.    
$result1 = mysql_query("SELECT * FROM items WHERE subcat = '$conditions'");
$num_rows = mysql_num_rows($result1);
$num_pages = $num_rows / $results_per_page;

if ($num_rows > $results_per_page){
?>
<div id="pagenum">
<?php
//This creates and displays the page numbers for the user to select
foreach( range( 1, $num_pages) as $i) {
     if ($thepage == $i){
           echo '<b><a href="browse.php?condition=' . $condition . '&page=' . $i . '">' . $i . '</a></b>';
     }else{
           echo '<a href="browse.php?condition=' . $condition . '&page=' . $i . '">' . $i . '</a>';
     }

     //This places a line between each number of pages
     if ($i == $num_pages){
     }else{
         echo " | ";
     }
     }
?>
</div>
<?php
     }else{ echo "Test";}
?>

那么任何人都可以看到这个问题吗?所以我的数据库中有 12 个条目。但是我只得到 2 页,每页 5 页,而我没有得到第 3 页,因为只剩下 2 个结果,而且似乎需要 5 个来完成它。 谢谢

【问题讨论】:

  • 旁注:要获取记录数,调用SELECT COUNT(*) ....就够了,绝对不需要读取所有记录。
  • 我原来有这个,我不记得为什么我现在改了,但我记得有些东西不能正常工作,所以我把它改成了这个工作正常。

标签: php mysql paging


【解决方案1】:

你需要使用ceil函数:

$num_pages = ceil($num_rows / $results_per_page);

【讨论】:

    【解决方案2】:

    我认为你最大的问题是当你将两个数字相除时,PHP 会给你一个浮点数。

    $one = 12;
    $two = 5;
    $result = $one / $two; // That will result in 2.4
    

    现在,从技术上讲,问题是您拥有三个页面,但 PHP 不会将 .4 页面视为一个页面,因此当您循环浏览它时,技术上只会执行两次。由于您使用的范围是 2.4,因此 PHP 似乎正在向下舍入。我会建议这样的事情:

    $result1 = mysql_query("SELECT * FROM items WHERE subcat = '$conditions'");
    $num_rows = mysql_num_rows($result1);
    $num_pages = ceil($num_rows / $results_per_page);
    
    if ($num_rows > $results_per_page){
        for($i = 0; $i < $num_pages; $i++) {
    

    ceil() 将强制该除法每次四舍五入,这将始终为您提供额外的页面。

    试一试!让我知道它是否解决了您的问题!

    【讨论】:

    • 是的,这确实有效,在您发布 ceil() 之前的那个人也是如此。所以谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2016-02-06
    • 2012-02-23
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多