当一个帖子被访问时,我除了需要返回这个帖子的信息外,还需要返回前一个帖子(如果存在)和下一个帖子.
我想知道是否有一种方法可以在单个查询/ Select 中 Select MAX(id)
和MIN(id)
,并为它们传递一个条件.我正在try 用Laravel做的例子,我将用SQL编写它,以使它也更容易
-拉维尔-Laravel
$query = Post::query();
$query = $query->from('posts')->select(DB::raw('MAX(id), MIN(id)'))->whereRaw("id < {$id} and id > {$id}")->first();
SQL:好的,好的.
select MAX(id), MIN(id) from `posts` where id < 5 and id > 5 limit 1
Id变量是帖子的id值.在本例中,它的值为5.我正在执行的查询是获取引用此id的Max和Min,但我还需要获取用户访问的帖子的信息.
DB有编号为4和6的帖子.也就是说,在本例中,我需要从编号为4、5和6的帖子获取信息.
WHERE条件永远不会是true
,但我不能使用or
.第一个条件是MAX
,第二个条件是MIN
.如果我使用or
,最大的id将来自DB.
我需要将最小值和最大值与一个值进行比较.也就是说,正如我上面解释的那样.如果id是5,我需要获取该值下面现有的最大id(),并且需要获取它上面的最小值.在我的例子中,根据我在数据库中的信息,它将是id4、5和6
一次会诊是可能的,还是我真的要做不止一次?