0

我正在做一个个人网站。我被困在博客上。我有它,所以它每页显示 5 个,当我的 MySQL 表中的 id 没有中断时很好。
但是,我有删除博客的能力,这搞砸了一切,因为我的循环包含丢失的 id,并且什么也没显示,所以每页只有 3 个或 4 个。 在此处输入图像描述

(id=10的博客被删除了)

我不会展示所有代码,但这里有一些。

$i = $blog_count-(($currentpage*$maxperpage)-$maxperpage);
while ($i >$blog_count-(($currentpage*$maxperpage)-$maxperpage)-$maxperpage){
//render the blogs
$i--;
}

$blog_count 等于表中有多少行。我还有另一个变量是 $maxid。它只是最大的id号。

任何帮助,将不胜感激。我有一种感觉,我应该知道如何做到这一点,但我很难过。

编辑:我将代码更改为

$start = $currentpage*$maxperpage-$maxperpage;
$query = "SELECT * FROM blogs ORDER BY id DESC LIMIT $start,$maxperpage";
$result=mysql_query($query) or die(mysql_error());
while ($blog = mysql_fetch_array($result)) 

它有效。

4

3 回答 3

1

您的问题似乎是您没有正确使用数据库。

您应该让数据库返回根据您的需要过滤和排序的行集合。在典型的博客场景中(文章可能处于非活动状态/尚未公开),您会要求数据库返回按日期排序的活动文章集合。阅读基本 SQL 并帮自己一个忙,并使用体面的 ORM(一个数据库抽象层,使执行查询变得容易,将您与原始 SQL 隔离开来)。

正如已经提到的,您可以使用 LIMIT 来获取行的子集,以防您想要进行分页。

于 2012-07-21T23:11:28.690 回答
0

正如其他人所提到的,您不应该依赖博客文章的任意 id 字段。从数据库中按排序顺序提取您的帖子,然后循环输出。下面是一些示例代码,可帮助您入门:

$results = $connection->query("SELECT * FROM Posts LIMIT 5, 5 ORDER BY id DESC");
while ($row = $result->fetch_assoc())
{
//Pull data from the row and display it
}

因此,此代码将从数据库中提取第 6 到第 10 个帖子,无论哪些帖子已被删除。LIMIT 的第一个参数是要跳过的行数(因此,第一页为 0,第二页为 5,等等),第二个参数是结果的最大数量(您希望它始终为 5)。

于 2012-07-21T23:21:39.607 回答
0

好的 2 件事我会建议...

使用 MySQL 限制子句,这将限制返回的结果数量。

IE

SELECT * FROM `table1` LIMIT 10;

或者使用另一个字段deleted来确定该行是否被“删除”,所以它仍然在数据库中,但不是活动的。

于 2012-07-21T23:04:30.053 回答