我在一个查询的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,但给了我同样的问题。
有人可以建议我如何限制行号在两个值之间的查询,或者建议一个可以用于相同目的的备用查询吗?
答案 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语句来获得返回的总行数。
像我说的那样,丑陋但功能性。如果有人可以建议一种方法来整理这个,那就太好了。