MySQL有点复杂的查询

时间:2013-04-23 22:01:33

标签: mysql cakephp sorting

我正在处理一个mysql查询,其中我需要结果集中的上一个和下一个id。我没有搜索查询就能得到它。但是在进行搜索时,显然ids不会有帮助......这将是基于params的其他领域。

所以,我正在运行两个不同的查询,一个用于当前用户ID,即123 ..另一个用于以前的用户ID和下一个用户ID。

查询就像这样.... select fields from users where (( id = IFNULL((select min(id) from users where id > 123),0) or id = IFNULL((select max(id) from users where id < 123),0) ) AND (username like "%john%"))

通过以上我得到的用户上一个和下一个ID ...但是当我在搜索示例'john'时,我无法从搜索结果中获取下一个ID和之前的ID?我也有字母排序A-Z和Z-A。因此,我必须按名称排序,按名称排序Asc,desc。

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

有什么选择可以达到这个目的?请分享一下你的想法?

1 个答案:

答案 0 :(得分:0)

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

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

第一个查询获取“上一个”记录,之前由您实际排序的任何内容定义。另一个查询颠倒了这种意义,因此您可以使用相同的顺序获得“下一个”记录,顺序颠倒(DESC - > ASC)。

您可以在其中一个查询上使用LIMIT 0,1,这样就可以将实际的“当前”记录也包含在结果集中。但是不要在两者上都这样做,否则联合将导致重复的“当前”。

相关问题