获取MySQL查询的行号,然后过滤值之间的行号

时间:2013-08-19 10:20:46

标签: mysql sql

我在一个查询的Stack Oveflow上看到了一些我需要检索MySQL查询的行号的例子。我想要做的是稍微扩展一下,然后允许我限制行数在两个值之间的结果集。这是允许对我的结果表进行分页。

我到目前为止的查询是:

SELECT l.ID, l.Name, l.Value, @curRow := @curRow + 1 AS row_number
FROM (
  SELECT * FROM $table
  ORDER BY Name ASC
) l
JOIN (
  SELECT @curRow := 0
) r
WHERE row_number BETWEEN 1 AND 3

此查询一直有效,直到我在末尾添加WHERE子句,并给出错误未知列row_number。我认为这可能是因为我将表命名为l,所以尝试使用WHERE l.row_number BETWEEN,但给了我同样的问题。

有人可以建议我如何限制行号在两个值之间的查询,或者建议一个可以用于相同目的的备用查询吗?

2 个答案:

答案 0 :(得分:4)

SELECT * FROM your_table LIMIT 5, 5

这将显示记录6,7,8,9和10

答案 1 :(得分:0)

好吧它有点难看,但这就是我的作品:

SELECT * FROM (
    SELECT l.ID, l.Name, l.Value, @curRow := @curRow + 1 AS row_number 
    FROM (
        SELECT * FROM $table 
        ORDER BY Name ASC
    ) l 
    JOIN (
        SELECT @curRow := 0
    ) r
) t 
WHERE row_number BETWEEN $start AND $end

所以我选择表中的所有字段,按名称排序。然后,我从该查询中获取字段的子集,并获取返回的每行的行号。然后,我在该组结果上进行第三次SELECT查询,以获取row_number在两个值之间的行。然后,我可以通过简单地删除最外面的SELECT语句来获得返回的总行数。

像我说的那样,丑陋但功能性。如果有人可以建议一种方法来整理这个,那就太好了。