分页,第一页结果数量错误

时间:2018-08-05 22:04:53

标签: php mysql pagination

我正在建立新闻网站,并且我拥有带有“时间”字段的mysql db,例如1533074400

如果我只打印查询的结果,一切都可以,但是如果我只想打印比今天更旧的新闻,那么我在首页上只得到2条新闻,而不是5条新闻。其余3个在第二页上。

问题出在查询上,如果我收到说我的数据库中有10条结果,而其中只有7条是过去的新闻,那么当我用

降序过滤时
if ($today > news_date)

我在第一页上收到2条新闻(其余3条是不可见的未来新闻,被上面的代码阻止),其余5条新闻在第二页上。所以我的问题是,如何正确处理它:第一页有5条新闻,第二页有2条新闻?

$results_per_page = 5;


if (!isset($_GET['page'])) {
   $page = 1;}
else {
   $page = $_GET['page'];
}


$this_page_first_result = ($page-1)*$results_per_page;

$sql='SELECT * FROM news ORDER BY time DESC LIMIT ' . $this_page_first_result . ',' .  $results_per_page;
$result = mysqli_query($con, $sql);
$number_of_results = mysqli_num_rows($result);

$today = strtotime("now");

while($row = mysqli_fetch_array($result)) 
{
    $news_date = $row[1];

    if ($today > $news_date) {
        echo HTML;
     }
}

$number_of_pages = ceil($number_of_results/$results_per_page);

for ($page=1;$page<=$number_of_pages;$page++) {
  echo '<a href="index.php?page=' . $page . '">' . $page . '</a> ';
}  

1 个答案:

答案 0 :(得分:0)

尝试一下:

$sql='SELECT * FROM news WHERE time < '.time().' ORDER BY time DESC LIMIT ' . $this_page_first_result . ',' .  $results_per_page;
//Note: time() is an equivalent to strtotime("now")

如果您正在MySQL中进行分页,则还应该在MySQL中进行过滤。

[编辑:附加说明]如果您在MySQL上分页,然后在PHP中进行过滤,则会出现类似这样的奇怪实例,因为MySQL不知道您打算从哪里开始。在这个特定的示例中,如果您有很多将来的项目,那么在开始查看条目之前,实际上可能会在结果页上出现几个空白页。

[编辑编辑:]另外,如果您这样做,您将不再需要if在PHP循环中进行检查,因为MySQL已经做到了。