2010-11-20 34 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>