2010-11-20 58 views
0

亲爱的所有...我熟悉MySQL,但不会与Firebird。在firebird中FOUND_ROWS()的功能是什么?

我想改变我的PHP页面,从MySQL到火鸟查询。但我在改变命令FOUND_ROWS()期间遇到了一些困难。是否有人在Fi​​rebird中知道FOUND_ROWS()的相同函数?

我浏览过每个网站,但我没有答案。我被困在这个case.please帮助。

回答

1

类似@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%。

警告这种方法效率很低,使用时需要您自担风险。

-1

如果您正在使用此FOUND_ROWS()显示类似显示出X行的y行,看看你的新页面的版本,可以在没有这些信息做。使用Firebird的方式,阅读文档似乎是,首先运行查询,而不使用LIMIT,然后使用LIMITLIMIT是MySQL,不确定它在Firebird中叫什么。然后你应该从MySQL转换到Firebird的SQL_CALC_ROWS

0

有没有办法在火鸟知道多少行会返回查询,但不运行查询和获取的所有数据或像这样运行的查询:

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