亲爱的所有...我熟悉MySQL,但不会与Firebird。在firebird中FOUND_ROWS()的功能是什么?
我想改变我的PHP页面,从MySQL到火鸟查询。但我在改变命令FOUND_ROWS()
期间遇到了一些困难。是否有人在Firebird中知道FOUND_ROWS()的相同函数?
我浏览过每个网站,但我没有答案。我被困在这个case.please帮助。
亲爱的所有...我熟悉MySQL,但不会与Firebird。在firebird中FOUND_ROWS()的功能是什么?
我想改变我的PHP页面,从MySQL到火鸟查询。但我在改变命令FOUND_ROWS()
期间遇到了一些困难。是否有人在Firebird中知道FOUND_ROWS()的相同函数?
我浏览过每个网站,但我没有答案。我被困在这个case.please帮助。
类似@Andrei K.答案。
回答你的问题:有没有等价在火鸟的FOUND_ROWS()的MySQL函数/语句。
解决方法:如果您致命地想知道该行数,请让引擎运行新的查询来计算第一个查询的特殊版本的行数。对于简单的查询,@Andrei K. answer是准确的,但一般情况下,包括通过与组查询和having子句使用这样的查询:
select count(*)
from (your original query here) q1;
您必须排除第一/如果出现在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%。
警告这种方法效率很低,使用时需要您自担风险。
如果您正在使用此FOUND_ROWS()
显示类似显示出X行的y行,看看你的新页面的版本,可以在没有这些信息做。使用Firebird的方式,阅读文档似乎是,首先运行查询,而不使用LIMIT
,然后使用LIMIT
。 LIMIT
是MySQL,不确定它在Firebird中叫什么。然后你应该从MySQL转换到Firebird的SQL_CALC_ROWS
。
有没有办法在火鸟知道多少行会返回查询,但不运行查询和获取的所有数据或像这样运行的查询:
SELECT COUNT(*) FROM <your tables and conditions go here>