我正在使用MySQL来存储财务资源,并使用这些数据来构建每个帐户的所有交易的寄存器。出于性能原因 - 并防止用户被庞大的桌子淹没 - 我对结果进行了分页。
现在,作为注册表的一部分,我会显示该帐户的运行余额。因此,如果我每页显示20个事务,并且我正在显示第二个页面,则使用如下数据:
这是最后一个令我烦恼的事。使用LIMIT子句可以很容易地选择第一个 40个事务,但是对于但是的前40个事件是否有类似的东西?像“LIMIT -40”这样的东西?
我知道我可以使用COUNT和一些小数学来做这个,但实际的查询有点难看(多个JOIN和GROUP BY),所以我宁愿尽可能多地发出它。这看起来很有用,可以包含在SQL中 - 我只是不知道它。还有其他人吗?
答案 0 :(得分:5)
LIMIT
子句可用于约束返回的行数 通过SELECT
声明。LIMIT
需要一个或两个数字参数, 这些必须都是非负整数常数 例外:
在预准备语句中,可以指定
LIMIT
个参数 用?占位符标记。在存储的程序中,可以使用指定
LIMIT
个参数 从MySQL开始的整数值例程参数或局部变量 5.5.6。使用两个参数,第一个参数指定的偏移量 第一行返回,第二行指定最大数量 要返回的行。初始行的偏移量为0(不是1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
从特定偏移量检索所有行直到结果的末尾 设置,您可以使用一些大数字作为第二个参数。这个 语句检索从第96行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
下次,请使用该文档作为您的第一个停靠点。
答案 1 :(得分:1)
你可以这样破解:
select sel.*
from
(
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, YourTableOrYourSubSelect t
) sel
where rownum > 40
有点像在MySQL中拥有Oracle的rownum。