php - 分页,第一页上的结果数量错误

标签 php mysql pagination

我正在制作新闻网站,我的 mysql 数据库的“时间”字段为 1533074400

如果我只打印查询结果,一切都很好,但如果我只想打印早于今天的新闻,我在第一页上只得到 2 个而不是 5 个新闻。其余 3 个在第二页。

问题出在查询上,如果我收到假设我的数据库中有 10 个结果,其中只有 7 个是过去的新闻,所以当我按降序过滤它们时

if ($today > news_date)

我在第一页获得 2 个新闻(其余 3 个是不可见的 future 新闻,被上面的代码阻止),在第二页获得其余 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> ';
}  

最佳答案

试试这个:

$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 不知道您真正打算从哪里开始。在这个特定的示例中,如果您有很多 future 日期的项目,您实际上可能会在开始看到条目之前得到几页空白的结果页面。

[Edit edit:] 此外,如果您这样做,您将不再需要 if 检查您的 PHP 循环,因为 MySQL 已经这样做了。

关于php - 分页,第一页上的结果数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698589/

相关文章:

mysql - 获取使用的 select 语句具有不同的列数

php - ON DUPLICATE KEY UPDATE 上的 SQL 语法错误

javascript - 分页:使用带有 getJSON 的 "Get More"按钮

php - 使用 localhost 作为服务器时在 php 中注册时的电子邮件确认

php - 删除mysql数据库中的n行表

php - 使用PDO将json文件导入MySQL时如何处理标签?

c# - 在 ASP.Net Core 中使用分页传递模型参数

html - 如何在 Angular 4 中为表格添加分页?

php - 从用于缓存的 url 路径构建 id

php - 内存不足总是在同一行