Firebird 中 MySQL 的 FOUND_ROWS() 的等效函数是什么?

问题描述 投票:0回答:3

我熟悉 MySQL,但不熟悉 Firebird。

我想更改我的 PHP 页面,从 MySQL 更改为 Firebird 查询,但在更改命令时遇到一些困难

FOUND_ROWS()
。 Firebird 中
FOUND_ROWS()
的等效功能是什么?

firebird
3个回答
1
投票

类似于@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% 的查询。

警告这种方法效率很低,使用风险自负。


0
投票
Firebird 无法知道在不运行查询并获取所有数据或运行查询的情况下将返回查询的行数:

SELECT COUNT(*) FROM <your tables and conditions go here>
    

-1
投票
如果您使用此

FOUND_ROWS()

 来显示诸如 
显示 X 行中的 Y 行之类的内容,请查看您的页面的新版本是否可以在没有该信息的情况下运行。使用 Firebird 阅读文档的方式似乎是,首先运行不带 LIMIT
 的查询,然后使用 
LIMIT
 运行查询。 
LIMIT
 是 MySQL,不知道它在 Firebird 中叫什么。然后是 
SQL_CALC_ROWS
 你应该从 MySQL 翻译成 Firebird。

© www.soinside.com 2019 - 2024. All rights reserved.