0

我的网站上有一个图片库,我想实现一个下一个/上一个按钮,一旦我到达数据库的末尾,它就会被发送回第一张图片。

我有一个适用于下一个按钮的 MYSQL 查询,问题出在上一个按钮上。我使用与下一个按钮相同的代码(更改了值以使其工作),但它停留在我的数据库的第一项上。

我正在使用id只是一个自动增量字段的字段对列表进行排序。

这是我的下一个代码:

SELECT * 
FROM photos
WHERE   
         id = (SELECT MAX(id) FROM photos WHERE status = '0' AND id < ".$id.") 
      OR id = (SELECT MAX(id) FROM photos WHERE status = '0' )
LIMIT 1

这是我以前的代码不起作用:

SELECT * 
FROM photos
WHERE   
         id = (SELECT MIN(id) FROM photos WHERE status = '0'  AND id > ".$id.") 
      OR id = (SELECT MIN(id) FROM photos WHERE status = '0' ) 
LIMIT 1

$id 变量是当前图片的 id。

我知道有很多关于 SO 的下一个/上一个问题,但我没有找到任何对我有帮助的问题。

4

1 回答 1

0

您的问题来自子句OR中的第二个操作数WHERE,它在两个查询中都包括第一张/最后一张照片,而与结果集中的当前位置无关;因为如果没有指定子句,MySQL 不保证返回这些结果的顺序ORDER BY,所以第一个项目可能在您想要的前一个项目之前排序,因此该LIMIT子句只返回该项目。

你可以通过分别指定ORDER BY id DESC和来解决这个问题ORDER BY id ASC,但是这样的测试真的应该在你的应用程序中根据是否返回任何结果来进行——所以我建议完全删除这些操作数。

然后,您可以简化查询,以供下一步:

SELECT   *
FROM     photos
WHERE    status = 0 AND id < $id
ORDER BY id DESC
LIMIT    1

对于以前的:

SELECT   *
FROM     photos
WHERE    status = 0 AND id > $id
ORDER BY id ASC
LIMIT    1

(这假设您确实打算使用“下一个”来获取具有较低的照片id,并使用“上一个”来获取具有较高的照片id;否则交换两个查询)。

于 2012-05-26T08:16:48.410 回答