1

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

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

我的表有三列

前任:

ID     foto    like

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

如果我选择 ID 4 next is 5, prev is 3 //this solution I have

对于 ID 3,下一个是 4,上一个是 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->id实际被选中并显示 foto

4

1 回答 1

1

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

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`

希望它能很好地满足您的需求

于 2013-06-13T11:58:44.603 回答