2010-11-20 6 views
0

Liebe alle ... Ich bin vertraut mit MySQL, aber nicht mit Firebird.Was ist die gleiche Funktion von FOUND_ROWS() in Firebird?

Ich möchte meine PHP-Seite von MySQL in Firebird Abfrage ändern. Aber ich habe einige Schwierigkeiten beim Änderungsbefehl FOUND_ROWS(). Gibt es jemanden, der weiß, was die gleiche Funktion von FOUND_ROWS() in Firebird ist?

Ich habe in jeder Seiten geblättert, aber ich habe keine Antwort. Ich bin in diesem Fall stecken. Bitte helfen.

Antwort

1

Ähnlich @Andrei K. Antwort.

Antwort auf Ihre Frage: Es gibt kein Äquivalent in Firebird für FOUND_ROWS() MySQL-Funktion/Erklärung.

Problemumgehung: Wenn Sie diese Anzahl von Zeilen unbedingt wissen möchten, bitten Sie die Engine, eine neue Abfrage auszuführen, um die Anzahl der vorhandenen Zeilen für eine spezielle Version der ersten Abfrage zu berechnen. Für einfache Abfragen ist @Andrei K. answer genau, aber für den allgemeinen Fall, einschließlich Abfragen mit group by- und having-Klauseln verwenden, um eine Abfrage wie folgt:

select count(*) 
    from (your original query here) q1; 

Sie haben die ersten/überspringen und um durch Klauseln auszuschließen, wenn in diese ursprüngliche Abfrage. Also, für eine Abfrage dieser Suche:

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; 

die FOUND_ROWS äquivalente Abfrage wird:

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 

Aus meiner Erfahrung funktioniert dies für 99,9% der Abfragen.

Warnung Dieser Ansatz ist sehr ineffizient, Verwendung auf eigene Gefahr.

-1

Wenn Sie diese FOUND_ROWS() sind mit so etwas wie zeigt Y Reihen von X Zeilen zeigen, ob die neue Version der Seite ohne diese Information zu tun. Der Weg mit Firebird, Lesen der Dokumentation scheint zu sein, die Abfrage ohne die LIMIT zuerst und dann mit der LIMIT zu starten. LIMIT ist MySQL, nicht sicher, wie es in Firebird genannt wird. Dann gibt es die SQL_CALC_ROWS, die Sie von MySQL zu Firebird übersetzen sollten.

0

Es gibt keine Möglichkeit in Firebird ist zu wissen, wie viele Zeilen Abfrage, ohne das Abfrage zurückkehren würde und alle Daten holen oder Abfrage wie folgt ausgeführt werden:

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