亲爱的所有人……我对MySQL很熟悉,但对火鸟并不熟悉。
我想更改我的php页面,从MySQL到Firebird query.But我在更改命令FOUND_ROWS()时遇到了一些困难。有没有人知道火鸟中FOUND_ROWS()的相同功能是什么?
我已经浏览了所有的网站,但我没有答案。我被这个case.please帮助卡住了。
发布于 2010-11-21 03:13:21
类似@Andrei K. answer。
对您问题的回答:在Firebird FOUND_ROWS() MySQL函数/语句中没有对应的。
解决方法:如果您非常想知道行数,请让引擎运行一个新的查询,以计算第一个查询的特殊版本的行数。对于简单查询,@Andrei K. answer是准确的,但对于一般情况,包括带有group by和having子句的查询,使用如下查询:
select count(*)
from (your original query here) q1;如果存在于原始查询中,则必须排除first/skip和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%的查询。
警告这种方法效率非常低,使用风险自负。
发布于 2010-11-20 18:59:00
在Firebird中,如果不运行查询并获取所有数据,或者像这样运行查询,就无法知道有多少行将返回查询:
SELECT COUNT(*) FROM <your tables and conditions go here>发布于 2010-11-20 13:34:01
如果您使用此FOUND_ROWS()显示X行中的Y行之类的内容,请查看新版本的页面是否可以没有该信息。使用Firebird时,阅读文档的方法似乎是,首先在没有LIMIT的情况下运行查询,然后使用LIMIT运行查询。LIMIT是MySQL,不知道它在火鸟里叫什么。然后是您应该从MySQL转换到Firebird的SQL_CALC_ROWS。
https://stackoverflow.com/questions/4231313
复制相似问题