1

我在 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 尝试了它,但给了我同样的问题。

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

4

2 回答 2

4

SELECT * FROM your_table LIMIT 5, 5

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

于 2013-08-19T10:24:27.917 回答
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 语句来获得返回的总行数。

就像我说的,丑陋但实用。如果有人可以提出一种整理方法,那就太好了。

于 2013-08-19T13:48:29.097 回答