0

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

所以,我正在运行两个不同的查询,一个针对当前用户标识,即 123..,另一个针对上一个用户标识和下一个用户标识。

查询是这样的...... 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?我也有AZ和ZA的字母排序。所以我必须按名称排序,按名称排序,升序,降序。

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

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

4

1 回答 1

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 ,这将允许实际的“当前”记录也包含在结果集中。但不要在两者上都这样做,否则联合会导致重复的“当前”。

于 2013-04-23T22:05:53.420 回答