我正在建立新闻网站,并且我拥有带有“时间”字段的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> ';
}
答案 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已经做到了。