Musisz podać SQL_CALC_FOUND_ROWS
na pierwszym SELECT
tylko w UNION
; w rzeczywistości nie potrzebujesz zewnętrznego zapytania o numer SELECT
, jak w przypadku korzystania z COUNT(*)
.
Tytułem przykładu, załóżmy, że mamy następującą kwerendę LIMIT
ED:
SELECT * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
Możemy po prostu napisać:
SELECT SQL_CALC_FOUND_ROWS * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
Następnie rozmowy:
SELECT FOUND_ROWS();
ten unika pewnych narzutów związanych z zewnętrznym zapytaniem wymienionym w pytaniu oraz w komentarzach J. oe odpowiedź Stefelliego (choć nie jestem całkowicie przekonany, że byłaby zauważalna różnica).
myślę, że warto ponownie iteracji, że będzie działać tylko wtedy, gdy używasz UNION ALL
zamiast UNION
- To dlatego, że liczba wierszy jest obliczana przed duplikaty są usuwane, co oznacza, dostaniesz taki sam wynik z FOUND_ROWS()
jak gdybyś użył UNION ALL
.
co jest nie tak z Twoimi rozwiązaniami? –