SQL

JiFile per Joomla!

JIFile
JiFile è una componente per Joomla! che permette di indicizzare il contenuto dei file(PDF, DOC, ecc.) per poter effettuare delle ricerche al loro interno.

Scopri di più...  Demo

JoomPhoto Mobile

JPhotoMobile
JoomPhoto Mobile è una componente per Joomla! che ti permette di condividere le foto dal tuo dispositivo Android sul tuo portale Joomla!.

Scopri di più...  Demo

iFile Framework

IFile
IFile è un framework open source scritto interamente in PHP, permette l'indicizzazione dei contenuti testuali di un documento (DOC, PDF, EXCEL, etc) e una rapida ricerca all'interno degli stessi.

Scopri di più...  Demo

Easy Language

EasyLanguage
Easy Language è un plugin per la gestione semplice ed immediata di testi multilingua in ogni parte possibile di joomla, articoli, componenti, moduli, metadata, template, altri componenti(esempio K2) ecc.

Scopri di più...

Article Book Effect

Article Book Effect
Visualizza gli articoli di Joomla con l'effetto volta pagina di un libro. Questo plugin consente di visualizzare il contenuto di un articolo Joomla come un vero e proprio libro o una rivista, utilizzando tutti i vantaggi di HTML5

Scopri di più...  Demo

 

Fototessera

Article Book Effect
La più famosa Android App che ti permette di stampare le foto tessere per i tuoi documenti con il tuo smartphone Android, in modo semplice ed intuitivo.

Scopri di più...

 

Ombra pazza 3D

Ombra pazza 3D
Ombra Pazza è il puzzle game 3D frenetico e divertente per Android! Prova a ruotare le forme portandole nella posizione delle proprie ombre senza mai fallire! Risolvi una dopo l'altra tutte le combinazioni dei livelli di gioco.

Scopri di più...

 

Admin Countdown

Admin Countdown
Modulo per Joomla! 2.5 e 3.x visualizza nella parte di amministrazione del sito, un timer con il conto alla rovescia del tempo rimanente della tua sessione.

Scopri di più...  Demo

 

Ottenere totale righe anche con LIMIT in MySql


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

PHP Classes

IFile
by isApp.it

nominee
November 2013