我熟悉 MySQL,但不熟悉 Firebird。
我想更改我的 PHP 页面,从 MySQL 更改为 Firebird 查询,但在更改命令时遇到一些困难
FOUND_ROWS()
。 Firebird 中 FOUND_ROWS()
的等效功能是什么?
类似于@Andrei K.回答。
回答你的问题:Firebird 中没有相当于 FOUND_ROWS() MySQL 函数/语句。
解决方法:如果您非常想知道行数,请要求引擎运行一个新查询来计算第一个查询的特殊版本中存在的行数。对于简单查询,@Andrei K.answer 是准确的,但对于一般情况,包括带有 group by 和having 子句的查询,使用如下查询:
select count(*)
from (your original query here) q1;
如果原始查询中存在第一个/跳过和排序子句,则必须排除它们。因此,对于这样的查询:
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% 的查询。
警告这种方法效率很低,使用风险自负。
SELECT COUNT(*) FROM <your tables and conditions go here>
FOUND_ROWS()
来显示诸如显示 X 行中的 Y 行之类的内容,请查看您的页面的新版本是否可以在没有该信息的情况下运行。使用 Firebird 阅读文档的方式似乎是,首先运行不带
LIMIT
的查询,然后使用
LIMIT
运行查询。
LIMIT
是 MySQL,不知道它在 Firebird 中叫什么。然后是
SQL_CALC_ROWS
你应该从 MySQL 翻译成 Firebird。