亲爱的...我熟悉MySQL但不熟悉Firebird。
我想将我的php页面从MySQL更改为Firebird查询。但是在更改命令FOUND_ROWS()
期间我遇到了一些困难。是否有人知道Firebird中FOUND_ROWS()的功能是什么?
答案 0 :(得分:1)
类似于@Andrei K.回答。
回答你的问题: Firebird中的无等效,用于FOUND_ROWS()MySQL函数/语句。
解决方法:如果您真的想知道该行数,请要求引擎运行新查询以计算第一个查询的特殊版本的行数。对于简单查询,@Andrei K. answer是准确的,但对于一般情况,包括具有group by和having子句的查询使用如下查询:
select count(*)
from (your original query here) q1;
如果原始查询中存在,则必须排除第一个/跳过和order by子句。因此,对于查询这样的查询:
select first 10 skip 20 pd.productcode, extract(year from ph.purchasedate) year, sum(pd.quantity) year_quantity
from purchase_details pd
inner join purchase_header ph
on ph.id = pd.purchase_id
where ph.cancelled = 0
and ph.salesman = 10
group by pd.productcode, extract(year from ph.purchasedate)
having sum(pd.quantity) > 1000
order by sum(pd.quantity) desc;
found_rows等效查询将是:
select count(*)
from (
select pd.productcode, extract(year from ph.purchasedate) year, sum(pd.quantity) year_quantity
from purchase_details pd
inner join purchase_header ph
on ph.id = pd.purchase_id
where ph.cancelled = 0
and ph.salesman = 10
group by pd.productcode, extract(year from ph.purchasedate)
having sum(pd.quantity) > 1000
) q1
根据我的经验,这适用于99.9%的查询。
警告这种方法效率很低,使用风险自负。
答案 1 :(得分:0)
Firebird无法在不运行查询并获取所有数据或运行查询的情况下知道有多少行会返回查询:
SELECT COUNT(*) FROM <your tables and conditions go here>
答案 2 :(得分:-1)
如果您使用此FOUND_ROWS()
来显示显示X行中的Y行,请查看您的新版本页面是否可以不使用该信息。 Firebird的方法,阅读文档似乎是,首先运行查询而不是LIMIT
然后使用LIMIT
。 LIMIT
是MySQL,不确定它在Firebird中的名称是什么。然后有SQL_CALC_ROWS
你应该从MySQL翻译成Firebird。