【问题标题】:MySQL little complex queryMySQL小复杂查询
【发布时间】:2013-04-23 22:01:32
【问题描述】:

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

所以,我正在运行两个不同的查询,一个针对当前用户 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。所以我将不得不按名称排序为按名称升序,降序。

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

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

【问题讨论】:

标签: mysql cakephp sorting


【解决方案1】:

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

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)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多