Per paginazione dei risultati di una query s’intende la suddivisione
degli stessi in più pagine in base ad un fattore che limita la visualizzazione ad un numero di record massimo predefinito in ognuna di esse. L’utilità di questo sistema è evidente: facilita la consultazione di dati che altrimenti potrebbero risultare interminabili e caotici, di conseguenza, ne accelera il caricamento con benefici evidenti per gli utenti.
A differenza di Access, con il quale il procedimento è tutto sommato abbastanza laborioso, MySQL incorpora una proprietà specifica espressamente dedicata alla paginazione: un particolare utilizzo della clausola LIMIT. Si tratta di un meccanismo nato per visualizzare i risultati all’interno di un intervallo costituito da un record di inizio ed uno di fine. A rigor di logica, però, semplicemente rendendo dinamici i due estremi è possibile garantirsi una paginazione automatica.
Nel nostro esempio ipotizziamo di estrarre l’elenco dei nomi e cognomi della nostra tabella tclienti costituita da tre campi:
cliente_id: contatore
cliente_nome: nome del cliente
cliente_cognome: cognome del cliente
La prima cosa da fare è calcolare il numero di record restituiti dalla nostra query. Ciò è importante in quanto risulta essenziale per calcolare il numero di pagine totali che saranno prodotte al termine delle operazioni. Il codice necessario per ottenere tale risultato è il seguente:
'Totale dei record
strSQL = "SELECT COUNT(*) FROM tclienti"
Set objRS = objConn.Execute(strSQL)
tot_record = objRS(0)
set objRS = nothing
Successivamente, una serie di passi consentono nell’ordine di:
- definire il numero di record (massimo) da visualizzare in ogni pagina
- calcolare il record di inizio della paginazione per ogni pagina
- calcolare l’esatto numero di pagine totali da visualizzare
'Record per pagina
pageSize = 5
'Primo record di ogni pagina
inizio = (page - 1) * pageSize
'Pagine complessive per effetto della paginazione
pagine_totali = tot_record / pageSize
'Arrotondamento in caso di resto della divisione precedente
if pagine_totali - CInt(pagine_totali) > 0 then
pagine_totali = CInt(pagine_totali + 1)
else
pagine_totali = CInt(pagine_totali)
end if
Poiché il numero totale dei record estratti con la prima query (tot_record) potrebbe non essere perfettamente divisibile per il numero massimo di record che abbiamo deciso di visualizzare in ogni pagina (pageSize), il numero totale di pagine da visualizzare sarebbe maggiore di una unità: ad esempio, se volessimo paginare 4 record per pagina su un totale di 15 record, la divisione con resto (15/4 = 3 con resto 3) imporrebbe di visualizzare i record dal tredicesimo al quindicesimo in una pagina aggiuntiva, la quarta appunto.
L’ultima parte dello script consente di visualizzare i record contando sulla clausola LIMIT. Conoscendo infatti, a questo punto, gli estremi dei record da visualizzare, possiamo costruire la seguente query:
'Visualizzazione dei record paginati
strSQL = "SELECT nome, cognome FROM tclienti LIMIT "& inizio &","& pageSize
Scorrendo i record estratti dalla query è infine possibile visualizzarli per l’utente.
Per facilitare la navigazione, inoltre, in base alla pagina in cui ci si trova rispetto al totale di quelle visualizzabili, è possibile aggiungere allo script dei link per passare dinamicamente da una pagina all’altra.
'Pagine precedenti
if page > 1 then
Response.write("<td><a href=""default.asp?page="& CInt(page - 1) &""">Precedente</a></td>")
end if
'Pagine successive
if tot_record > pageSize and pagine_totali > page then
Response.write("<td><a href=""default.asp?page="& CInt(page + 1) &""">Successiva</a></td>")
end if
Come si evince, il link passa in querystring la pagina desiderata (page) e questo valore deve essere recuperato in cima allo script, imponendo tra l’altro che si parta sempre dalla prima pagina quando questo valore non fosse presente:
'Recupero le variabili per paginare
page = Cint(request.querystring("page"))
if page = 0 then page = 1
In questo modo è stato possibile ordinare tutti i record presenti sulla tabella interessata suddividendoli in più pagine, mostrare all’utente il numero totale di pagine presenti e consentire in modo estremamente agevole la navigazione fra tutte le pagine create. Nel listato allegato all'articolo un esempio completo.