我正在制作一个个人网站。
我被困在博客上。我有它所以每页显示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。它只是最大的身份证号码。
任何帮助将不胜感激。我有一种感觉,我应该知道如何做到这一点,但我很难过。
编辑:我将代码更改为
$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))
它有效。
答案 0 :(得分:1)
您的问题似乎是您没有正确使用数据库。
您应该让数据库返回根据您的需要进行过滤和排序的行集合。在典型的博客场景中(文章可能处于非活动状态/尚未公开),您会要求数据库返回按日期排序的活动文章集合。阅读基本的SQL并帮自己一个忙,并使用一个像样的ORM(一个数据库抽象层,使您可以轻松执行查询,将您与原始SQL隔离)。
如前所述,您可以使用LIMIT获取行的子集,以防您想要进行分页。
答案 1 :(得分:0)
好的两件事我建议......
使用MySQL限制子句,这将限制返回的结果数量。
即
SELECT * FROM `table1` LIMIT 10;
或者使用deleted
之类的其他字段来确定该行是否已“删除”,因此它仍然在数据库中,但不会处于活动状态。
答案 2 :(得分: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)。