Wie implementiere ich SQL_CALC_FOUND_ROWS, die auf einer Abfrage mit UNION?
Mysql, ich bin mit SQL_CALC_FOUND_ROWS um die gesamte Anzahl der möglichen Datensätze.
Wie verwende ich es auf UNION?
Das einzige, was funktioniert für mich im Moment, die scheint etwas off ist:
SELECT COUNT(*)
FROM(SELECT * FROM t1 UNION SELECT * FROM t2) A;
oder
SELECT SQL_CALC_FOUND_ROWS *
FROM(SELECT * FROM t1 UNION SELECT * FROM t2) A;
- was ist Los mit Ihr Lösungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der FOUND_ROWS () - Dokumentation:
SELECT SQL_CALC_FOUND_ROWS * FROM ((SELECT columns FROM t1) UNION ALL (SELECT columns FROM t2)) _ut
nichtSELECT * FROM ((SELECT SQL_CALC_FOUND_ROWS columns FROM t1) UNION ALL (SELECT columns FROM t2)) _ut
Müssen Sie
SQL_CALC_FOUND_ROWS
auf den erstenSELECT
imUNION
nur; Sie nicht wirklich brauchen, eine äußereSELECT
- Abfrage, wie bei der VerwendungCOUNT(*)
.Beispiel, sagen wir, wir haben die folgenden
LIMIT
ed-Abfrage:Können wir einfach schreiben:
Dann rufen wir:
Dies vermeidet zusätzlichen Aufwand, der mit der äußeren Abfrage in Ihrer Frage erwähnt und in den Kommentaren von Joe Stefanelli Antwort (obwohl ich bin nicht ganz davon überzeugt, es würde ein merklicher Unterschied).
Ich denke es lohnt sich zu re-iterieren, dass diese wird nur funktionieren, wenn Sie mit
UNION ALL
eher alsUNION
- Das ist, weil die Zeilenanzahl wird berechnet, bevor die Duplikate werden entfernt, was bedeutet, du wirst das gleiche Ergebnis erhalten ausFOUND_ROWS()
als würden Sie, wenn Sie verwendet hatteUNION ALL
.