MySQL小复杂查询

MySQL小复杂查询,mysql,cakephp,sorting,Mysql,Cakephp,Sorting,我正在处理一个mysql查询,其中我需要结果集中的上一个和下一个id。我能够在没有搜索查询的情况下得到它。但是当进行搜索时,显然ID不会有帮助。。。它将是基于参数的其他字段 因此,我运行两个不同的查询,一个查询当前用户ID,即123。。另一个用于前一个用户标识和下一个用户标识 查询是这样的。。。。 从用户中选择字段,其中 id=IFNULLselect minid来自id>123,0的用户 或id=IFNULLselect从idASC 您可以对其中一个查询使用限制0,1,这将允许实际的当前记录也

我正在处理一个mysql查询,其中我需要结果集中的上一个和下一个id。我能够在没有搜索查询的情况下得到它。但是当进行搜索时,显然ID不会有帮助。。。它将是基于参数的其他字段

因此,我运行两个不同的查询,一个查询当前用户ID,即123。。另一个用于前一个用户标识和下一个用户标识

查询是这样的。。。。 从用户中选择字段,其中 id=IFNULLselect minid来自id>123,0的用户 或id=IFNULLselect从id<123,0的用户中选择maxid 和用户名%john%

通过上面的内容,我得到了用户的上一个ID和下一个ID。。。但是当我有一个正在进行的搜索示例“john”时,我无法从搜索结果中获取下一个id和上一个id?此外,我有字母排序A-Z和Z-A。所以我将不得不按名称排序为按名称排序Asc,desc

将搜索结果ID存储在会话中是否是一个好主意,包括分页ID


实现这一目标有哪些选择?请分享您的想法?

要获取下一个/上一个正在排序的其他字段,您需要在一个联合中完成两个单独的查询

SELECT ...
FROM users
WHERE whatever=whatever
ORDER BY sortfield DESC limit 1,1

UNION ALL

SELECT ..
FROM users
WHERE whatever=whatever
ORDER BY sortfield ASC LIMIT 1,1
第一个查询获取前一条记录,前一条记录由实际排序的内容定义。另一个查询颠倒了意义,这样您就可以使用相同的order by获得下一条记录,顺序颠倒为DESC->ASC


您可以对其中一个查询使用限制0,1,这将允许实际的当前记录也包含在结果集中。但不要在两个方向都这样做,否则接头将导致重复电流。

似乎与此问题类似;检查我的答案,因为它可能会有所帮助;