我正在制作新闻网站,我的 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/