Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql next&;以前的记录问题_Mysql_Pagination - Fatal编程技术网

Mysql next&;以前的记录问题

Mysql next&;以前的记录问题,mysql,pagination,Mysql,Pagination,我的网站上有一个图片库,我想实现一个下一个/上一个按钮,一旦我到达数据库的末尾,它就会被发送回第一张图片 我有一个MYSQL查询用于下一个按钮,问题来自上一个。我使用了与“下一步”按钮相同的代码(更改了值以使其工作),但它仍然停留在数据库的第一项上 我正在使用id字段对列表进行排序,该字段只是一个自动递增字段 这是我下一步的代码: SELECT * FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE stat

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

我有一个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
$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