Ä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.