使用SQL和PHP获取下一篇文章

使用SQL和PHP获取下一篇文章,php,sql,Php,Sql,我做了一个非常粗略和基本的CMS作为学习练习。我的下一个挑战是创建分页(下一篇文章,上一篇文章) 理想情况下,如果post\u status设置为published,我需要获得下一篇文章 现在我得到了这样一个帖子: 选择帖子标题、帖子内容、帖子id、帖子状态 发帖 其中post_id=“$id” 并发布状态为“已发布” 在我看来,我会在PHP端增加$id,就像$id++。因此,如果我在post\u id=19,我会尝试获取post\u id=20。但是,如果该帖子未设置为“已发布”,会发生什么情

我做了一个非常粗略和基本的CMS作为学习练习。我的下一个挑战是创建分页(下一篇文章,上一篇文章)

理想情况下,如果
post\u status
设置为
published
,我需要获得下一篇文章

现在我得到了这样一个帖子:

选择帖子标题、帖子内容、帖子id、帖子状态
发帖
其中post_id=“$id”
并发布状态为“已发布”


在我看来,我会在PHP端增加
$id
,就像
$id++
。因此,如果我在
post\u id=19
,我会尝试获取
post\u id=20
。但是,如果该帖子未设置为“已发布”,会发生什么情况?如何获取下一个条目“发布位置”
WHERE post_status='published'
?这可能是
21
23
,等等。

你可以这样做,比如说你有一个

$id = 19;


SELECT post_title,
post_content, 
post_id, 
post_status 
FROM posts 
WHERE post_status='published'
AND post_id > '$id' 
order by post_id
LIMIT 1
这将使用
post\u status='published'
检查id>19的帖子,然后通过排序和
限制1获得19的下一个帖子

更新 正如danielsmile评论的那样,在$id=19之前获得上一个是为了获得最后一个;和上面一样

SELECT post_title,
    post_content, 
    post_id, 
    post_status 
    FROM posts 
    WHERE post_status='published'
    AND post_id < '$id' 
    order by post_id DESC
    LIMIT 1
选择文章标题,
发布内容,
邮政编码,
产后状态
发帖
发布位置_status='published'
和post_id<'$id'
邮购编号说明
限制1

如果帖子是按
id
排序的(可能按日期排序会更好),您可以使用以下方法获得下一篇帖子:

SELECT post_title, post_content, post_id, post_status
FROM posts 
WHERE port_status = 'published' 
AND id > $id 
ORDER BY id ASC 
LIMIT 1

这意味着-获取比当前帖子id更高的所有帖子。按
id
升序对它们进行排序,只得到第一个。因此,它会为您提供最接近的较高id的第一篇帖子,这有助于获得下一篇帖子,但OP的CMS使用Last和next。修改您的答案以反映我对a+1的回答。谢谢!您能否详细说明一下
post\u id>“$id”
。这是否会变得更大,但是
LIMIT 1
控制着它,所以它实际上得到了1?是的,它将首先检查id>$id,然后因为有一个order by子句
order by post_id
,它将从大于$id的id开始按升序排序,limit 1将返回的数据限制为紧跟在提供的id之后的一条记录。您还交换了
WHERE
。在这种情况下,谁先来重要吗?