【问题标题】:MySQL - next / previous ID wih cyclingMySQL - 循环的下一个/上一个 ID
【发布时间】:2013-06-09 18:59:30
【问题描述】:

我需要通过循环创建上一个/下一个功能。我当前的解决方案,如果我选择MAX(ID),则下一个为NULL

我怎样才能最有效地获得MIN(ID) 而不是NULL(反之亦然)。当然,如果我的结果是NULL,我可以使用IF 或者创建第二个查询,但我想知道是否有更好的解决方案。

我的表有三列

例如:

ID     foto    like

3        A      0
4        B      0
5        C      0
10       D      0

如果我选择 ID 4 next is 5, prev is 3 //这个解决方案我有

对于 ID 3,next 是 4,previous 是 10 //这就是我想要的

对于上一个/下一个我使用这个查询

(
    SELECT MIN(`ID`) AS id 
    FROM fotos 
    WHERE `ID` > '$this->id'
    ORDER BY `like` DESC
)
UNION
(
    SELECT MAX(`ID`) AS id 
    FROM fotos 
    WHERE `ID` < '$this->id'                                            
    ORDER BY `like` DESC
)

$this-&gt;id 实际被选中并显示照片

【问题讨论】:

  • 你想要当前 foto 的下一个和上一个 id 对吗??
  • @dianuj 是的.. 完全正确

标签: mysql database max min


【解决方案1】:

对于当前foto 的下一个和上一个 id,您可以这样做

SELECT COALESCE((SELECT id FROM `foto` WHERE id<'$this->id' ORDER BY DESC id LIMIT 1),
       (SELECT  MAX(id) FROM `foto`))  AS `prev`,
       COALESCE((SELECT id FROM `foto` WHERE id>'$this->id' ORDER BY id LIMIT 1 ),
       (SELECT MIN(id) FROM `foto`)) AS `next`

希望它能满足您的需求

【讨论】:

  • 解决方案几乎可以,我接受了。唯一的问题是,具有 MIN/MAX 的 COALESCE 的第二部分不尊重 ORDER BY 作为第一部分。但我的解决方案也有错误。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 2016-03-06
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多