Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:如何从数据库中选择下一行或上一行?_Php_Mysql_Database - Fatal编程技术网

Php MySQL:如何从数据库中选择下一行或上一行?

Php MySQL:如何从数据库中选择下一行或上一行?,php,mysql,database,Php,Mysql,Database,我有一个名为posts的表,在该表中有一个post_id为long的列和其他列ofc 如何按post_id从表中选择下一行或上一行 假设我目前的职位id是15。现在我需要选择下一行,在那里满足某些条件,所以我需要放入一些where子句 我不善于解释我的感受。我在找这样的东西: SELECT (next row) FROM posts WHERE post_draft=0 && post_approved=1 有人能帮我吗?关系数据库系统没有下一行或上一行的概念。这是因为在这样的

我有一个名为posts的表,在该表中有一个post_id为long的列和其他列ofc

如何按post_id从表中选择下一行或上一行

假设我目前的职位id是15。现在我需要选择下一行,在那里满足某些条件,所以我需要放入一些where子句

我不善于解释我的感受。我在找这样的东西:

SELECT (next row) FROM posts WHERE post_draft=0 && post_approved=1

有人能帮我吗?

关系数据库系统没有下一行或上一行的概念。这是因为在这样的数据库中没有条目的自然顺序。所以“下一个”和“上一个”这两个术语并没有真正定义

但是,您可以实现一个查询,以提供所需的内容:

SELECT * 
  FROM posts 
  WHERE post_id>15 
    AND post_draft=0 
    AND post_approved=1
  ORDER BY post_id ASC
  LIMIT 1;

因此,如果您有当前的post_id,则可以根据结果集的给定顺序轻松选择下一个条目。显然,前一个条目也可能出现同样的情况

我会用这样的东西

$next_post_query = "SELECT * FROM `posts` WHERE `post_draft`=0 AND `post_approved`=1 AND `post_id` > {$current_post_id} order by `post_id` asc limit 1";
$prev_post_query = "SELECT * FROM `posts` WHERE `post_draft`=0 AND `post_approved`=1 AND `post_id` < {$current_post_id} order by `post_id` desc limit 1";

假设post_id列是自动递增的,您可以尝试


在数据库中没有下一行或上一行的post\U id为0且post\U approved为1的post中选择*从post\U id中选择post\U id+1。生成新变量$previous=$post\U id-1;然后进行查询以选择其中id=$previous。另外,请检查此项,确保在使用查询之前先清理查询。PDO的狗屎,所以你总是有一个坚实的基础保护。@NikolayGanovski-$post_id-1将无法工作时,有差距。真棒,这就像一个魅力。为了选择上一行,我刚刚将post_id改为大于,改为小于,并将ORDER BY改为DESC,如果有人有一天偶然发现了这篇文章:Thank$post_id+1在有间隙时不起作用。如果下一个id是草稿或未经批准,该子查询也不会工作。@RickJames Hello!!!我假设post id是自动递增的,所以不可能有任何间隙…@RickJames:其次,我的假设是:他想在满足where条件的“post id”之后选择“next”post id…@RickJames so。。。如果发布id=1,其中草稿=0,发布批准=1。。。然后我们要显示post id=2的行。。同样,如果post_id=5,其中草稿=0,post_批准=1。。。然后我们要显示post id的行=6@RickJames我认为我的答案符合要求。。。但也许我理解错了这个问题。。。