【问题标题】:MYSQL/PHP Pagination shows 9 pages regardless of results returnedMYSQL/PHP 分页显示 9 页,无论返回结果如何
【发布时间】:2017-02-19 12:25:09
【问题描述】:

我将以下代码用于事件页面 mysql 查询以显示当前日期的分页结果,但是即使结果总共只有 3 页等,它也会在分页链接中显示 9 页。有人可以帮我识别吗为什么会这样?

            $per_page = 25;
            $pages_query = mysql_query("SELECT COUNT('CompName') FROM my_db");
            $pages = ceil(mysql_result($pages_query, 0) / $per_page);
            $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
            $start = ($page - 1) * $per_page;
            $query = mysql_query("SELECT *, DATE_FORMAT(StartDate, '%d/%m/%Y') StartDate, CompName, HostState, Location,  competitiontypedesc FROM my_db WHERE StartDate >= CURDATE() LIMIT $start, $per_page"); 

            while($query_row = mysql_fetch_assoc($query)) {
            echo"
            <li class='kleo-masonry-item event-item'> 
            <div class='member-inner-list animated animate-when-almost-visible bottom-to-top start-animation grey-border'> 
            <div class='event-cell event-date-cell'>
            <p class='no-margin'>" . $query_row["StartDate"] . "</p>
            </div>
            <div class='event-cell name'>
            <p class='no-margin'>" . $query_row["CompName"] ." " .$query_row["LastName"]. "</p></div>
            <div class='event-cell'>
            <p class='no-margin'>" . $query_row["Location"] . "</p>
            </div>
            <div class='event-cell'>
            <p class='no-margin'>" . $query_row["HostState"] . "</p>
            </div>
            </li>"
            ;   
            }

            $prev = $page - 1;
            $next = $page + 1;

            if(!($page <= 1)){
            echo "<a href='?page=$prev'><</a> ";}

            if($pages >= 1){
            for($x=1; $x<=$pages; $x++){
            echo ($x == $page) ? '<b><a href="?page='.$x.'">'.$x.'</a></b> ' : '<a href="?page='.$x.'">'.$x.'</a>';}
            }

            if(!($page >= $pages)){
            echo "<a href='?page=$next'>></a> ";}
            }
            }

【问题讨论】:

  • 请阅读这个问题:stackoverflow.com/questions/12859942/…
  • echo $pages; 告诉你什么?
  • 感谢 Michas,意识到它的贬值并将更新,代码来自较旧的教程
  • 回显 $pages;显示“9”
  • @ParkProductions 下面给出了答案,解释了你做错的事情。希望那个的回答能解决你的问题。

标签: php mysql pagination


【解决方案1】:

因为当你计算行数时,你总是计算整个表格。

$pages_query = mysql_query("SELECT COUNT(`CompName`) FROM my_db");

但是当你获取数据时,你在 where 子句中有一个关于 StartDate 的条件。

$query = mysql_query("SELECT *, DATE_FORMAT(StartDate, '%d/%m/%Y') StartDate, CompName, HostState, Location,  competitiontypedesc FROM my_db WHERE StartDate >= CURDATE() LIMIT $start, $per_page");

因此,您应该在计数查询中添加相同的 StartDate 条件。

$pages_query = mysql_query("SELECT COUNT(`CompName`) FROM my_db WHERE StartDate >= CURDATE()");

其实count(*)会比count(CompName)好。

$pages_query = mysql_query("SELECT COUNT(*) FROM my_db WHERE StartDate >= CURDATE()");

https://www.percona.com/blog/2007/04/10/count-vs-countcol/

【讨论】:

  • 如果使用 MyISAM 表,count() 会有更好的性能。 $pages_query = mysql_query("SELECT COUNT() FROM my_db WHERE StartDate >= CURDATE()"); percona.com/blog/2007/04/10/count-vs-countcol 如果使用 Innodb,count(*) 和 count(ComName) 的性能是一样的。
  • 感谢 Tung 的成功,它现在显示的页面数量正确。
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多