È necessario specificare SQL_CALC_FOUND_ROWS
al primo SELECT
solo nel UNION
; non hai effettivamente bisogno di una query esterna SELECT
come quando usi COUNT(*)
.
A titolo di esempio, diciamo che abbiamo la seguente query LIMIT
ndr:
SELECT * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
possiamo semplicemente scrivere:
SELECT SQL_CALC_FOUND_ROWS * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
Abbiamo poi chiamano:
SELECT FOUND_ROWS();
Questo evita un sovraccarico di avere la query esterna menzionata nella tua domanda e nei commenti di J oe la risposta di Stefanelli (anche se non sono del tutto convinto che sarebbe una differenza evidente).
penso che sia rimarcato che questo funziona solo se si utilizza UNION ALL
piuttosto che UNION
- Questo è perché il conteggio delle righe viene calcolato prima di duplicati vengono rimossi, il che significa che si otterrà lo stesso risultato da FOUND_ROWS()
come faresti se avessi usato UNION ALL
.
cosa c'è di sbagliato con le vostre soluzioni? –