Mysql next&;以前的记录问题
我的网站上有一个图片库,我想实现一个下一个/上一个按钮,一旦我到达数据库的末尾,它就会被发送回第一张图片 我有一个MYSQL查询用于下一个按钮,问题来自上一个。我使用了与“下一步”按钮相同的代码(更改了值以使其工作),但它仍然停留在数据库的第一项上 我正在使用Mysql next&;以前的记录问题,mysql,pagination,Mysql,Pagination,我的网站上有一个图片库,我想实现一个下一个/上一个按钮,一旦我到达数据库的末尾,它就会被发送回第一张图片 我有一个MYSQL查询用于下一个按钮,问题来自上一个。我使用了与“下一步”按钮相同的代码(更改了值以使其工作),但它仍然停留在数据库的第一项上 我正在使用id字段对列表进行排序,该字段只是一个自动递增字段 这是我下一步的代码: SELECT * FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE stat
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
$id变量是当前图片id
我知道有很多关于SO的下一个/上一个问题,但我没有发现任何对我有帮助的问题。您的问题来自
WHERE
子句中的第二个或操作数,该子句在两个查询中都包括第一个/最后一个照片,而与结果集中的当前位置无关;由于MySQL不保证在未指定任何orderby
子句的情况下返回这些结果的顺序,因此第一个项目可能是在您所需的前一个项目之前订购的,因此LIMIT
子句只会返回该项目
您可以通过分别指定orderbyiddesc
和orderbyidasc
来解决这个问题,但这样的测试确实应该在应用程序中根据是否返回任何结果进行,因此我建议完全删除这些操作数
然后,您可以简化查询,以便下一步:
SELECT *
FROM photos
WHERE status = 0 AND id < $id
ORDER BY id DESC
LIMIT 1
(这假设您确实打算使用“下一步”来获取id较低的照片,使用“上一步”来获取id较高的照片;否则,将这两个查询调换一下。)我认为您混淆了这两个问题。第一个查询应该是下一个查询,第二个查询是上一个查询。好的,我理解所有这些,但是我希望一旦你到达数据库的末尾,它就会回到开始,我希望它能够循环。这是我唯一没有开始工作的部分。@JorisBlanc:在应用程序中实现这个逻辑。例如,如果上面的查询没有返回任何结果,那么选择适当的max/min id来查找循环项。这就是我想做的,但是有没有一种方法可以使用某种if
和else
只执行一个查询,或者我应该使用php if…else语句。
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