如果不存在则跳过行。 MySQL的/ PHP

时间:2012-07-21 22:52:38

标签: php mysql row

我正在制作一个个人网站。 我被困在博客上。我有它所以每页显示5个,当我的MySQL表中的ID没有中断时,它很好。
但是,我有能力删除博客,这会搞砸一切,因为我的循环包含缺少的ID,并且没有显示任何内容,因此每页只有3或4个。 enter image description here

(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)) 

它有效。

3 个答案:

答案 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)。