【问题标题】:whats the same function of FOUND_ROWS() in firebird?firebird 中 FOUND_ROWS() 的功能是什么?
【发布时间】:2010-11-20 05:00:34
【问题描述】:

亲爱的...我熟悉 MySQL 但不熟悉 Firebird。

我想将我的 php 页面从 MySQL 更改为 Firebird 查询。但是在更改命令 FOUND_ROWS() 时遇到了一些困难。有谁知道 Firebird 中 FOUND_ROWS() 的相同功能是什么?

我浏览了每个网站,但没有答案。我被困在这种情况下。请帮助。

【问题讨论】:

    标签: mysql firebird


    【解决方案1】:

    类似于@Andrei K. 的回答。

    回答您的问题:Firebird 中对于 FOUND_ROWS() MySQL 函数/语句没有等效项

    解决方法:如果您非常想知道该行数,请让引擎运行一个新查询来计算第一个查询的特殊版本存在的行数。对于简单的查询,@Andrei K. answer 是准确的,但对于一般情况,包括使用 group by 和有子句的查询使用这样的查询:

    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% 的查询。

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

    【讨论】:

      【解决方案2】:

      如果不运行查询并获取所有数据或运行查询,Firebird 无法知道有多少行会返回查询:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-30
          • 2016-06-07
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-20
          相关资源
          最近更新 更多