Ottenere totale righe anche con LIMIT in MySql
-
Categoria: SQL
-
Pubblicato Giovedì, 05 Settembre 2013
-
Scritto da Paolo Scolamacchia
In uno script
Php che realizza la
paginazione dei dati di un
DB MySql, si può avere una situazione come quella seguente (in questo esempio si assume che ogni pagina contenga 20 records, e che la tabella sia quella degli utenti)
__________________________________________________
nomeutente1
nomeutente2
....
nomeutente20
__________________________________________________
Totale righe: 89 - Pagine 1 [2] [3] [4] [5]
__________________________________________________
In questa situazione (iniziale), la variabile che contiene la pagina corrente vale 1.
Facendo clic sul link della pagina 2 si arriva nella situazione seguente:
__________________________________________________
nomeutente21
nomeutente22
....
nomeutente40
________________________________________________
Totale righe: 89 - Pagine [1] 2 [3] [4] [5]
________________________________________________
In questo caso, la variabile che contiene la pagina corrente vale 2.
E così via.
Ma come fare per ottenere la variabile che dice quant'è il totale delle righe (in questo esempio:89) come se si fosse eseguita la query senza la clausola
LIMIT?
Ora, la query che viene utilizzata per la paginazione é del tipo seguente:
select nomeutente from utenti LIMIT (pagina_corrente - 1) * 20, 20
E una
prima soluzione per ottenere il valore cercato consiste nell'eseguire un'altra query, come la seguente:
select count(*) from utenti;
La
soluzione corretta però é quella della seguente forma, in cui si riscrive la query in questo modo:
select
SQL_CALC_FOUND_ROWS nomeutente
from utenti
LIMIT (pagina_corrente - 1) * 20, 20;
select FOUND_ROWS();
Si noti che:
- si é messa la clausola aggiuntiva SQL_CALC_FOUND_ROWS davanti al selettore "nomeutente"
- la seconda query é composta unicamente dalla funzione FOUND_ROWS()
- le due query devono essere eseguite una immediatamente dopo l'altra.
In tal modo si concatenano in effetti due query, ma dal
peso computazionale minore che se si fosse adottata la prima soluzione.
Questo é il motivo che rende preferibile questa soluzione, dato che normalmente le query sono complesse, e dato che si deve fare attenzione alle prestazioni della macchina.
Per permettere al lettore di verificare sul proprio sistema, si dovrà
scaricare il seguente file:
Tale file, facilmente adattabile alla propria situazione di DB, offre al suo interno la
procedura corretta per ricavare a) le righe che bisogna mandare alla paginazione, b) il valore totale richiesto.
Per
verificare lo script si può scegliere uno dei modi seguenti:
1)
da riga di comando: eseguire lo script seguente
php sqlcalclimit.php 2)
via web: collocare lo script sqlcalclimit.php dentro la propria cartella di document root e richiamare tale script via browser , ad esempio con :
http://localhost/sqlcalclimit.php
Credits:
http://www.arraystudio.com/as-workshop/mysql-get-total-number-of-rows-when-using-limit.html http://php.net/manual/en/mysqli.multi-query.php
You have no rights to post comments