在MySQL中没有按ID排序的结果中找到上一条和下一条记录的最快方法是什么?

时间:2009-06-30 05:07:41

标签: mysql

我环顾四周,我在网站上找到的唯一问题/答案与MySQL中的ID排序有关。问题包括:stackoverflow.com/questions/645102stackoverflow.com/questions/169233

我反而希望在按ID以外的其他列排序时查找上一行和下一行。例如:

我首先运行此查询以获取用户列表:

SELECT id, first_name, last_name 
FROM user 
WHERE last_name LIKE 'm%' 
    AND active_flag = 1 
ORDER BY last_name, first_name

现在,用户点击其中一个结果,然后将其发送到该用户的详细信息页面。在该页面上,我想显示上一个和下一个链接。

我有一个想法是做同样的查询,但限制它为3行,1之前,当前的1和1之后,但后来我意识到我不知道结果列表中的当前用户在哪里

除了选择整个结果集之外的任何其他想法,获取数组的键然后找到上一个和下一个?

我正在使用MySQL和PHP。

1 个答案:

答案 0 :(得分:1)

“小于”和“大于”运算符也适用于字符串字段。获取当前记录。然后做:

SELECT id, first_name, last_name 
FROM user 
WHERE last_name >= $current_lastname
    AND first_name > $current_firstname
    AND active_flag = 1 
ORDER BY last_name, first_name

如果(last_name, first_name)上有聚簇索引,则此查询应该很快。当然,使用MySQL时无法保证,因此您必须在查询上运行EXPLAIN以确保。