Programmatore Freelance, Programmatore MySQL, Programmatore PHP, Esperto in Database MySQL e alla creazione di Query SQL, Sviluppo di Applicazioni Web, Realizzazione Siti Internet dinamici.

Selezionare più righe da una tabella utilizzando MySQL.



Questa settimana, durante la stesura di un progetto come Programmatore PHP Freelance, mi sono imbattuto nella necessità di selezionare più righe con una Query utilizzando MySQL.
Visto che la cosa può non risultare intuitiva, ho deciso di scrivere una breve Guida MySQL per spiegare come poter selezionare diverse righe della stessa tabella e raggrupparle per un determinato valore.

Esempio Pratico:
Supponiamo di avere una tabella padri e una tabella figli:

Padri
id   nome    paese   lavoro
1    Luigi   Roma    Impiegato
2    Michele Milano  Programmatore
3    Antonio Roma    Operaio
4    Roberto Napoli  Impiegato

Figli
id   idPadre   nome
1       1      Giulio
2       1      Aldo
3       2      Lucilla
4       3      Giulio
5       4      Aristide
6       4      Aldo
7       3      Paolo
8       3      Aldo

Supponiamo di volere selezionare dal nostro database MySQL tutti gli id padre di quei padri che abbiano un figlio di nome Giulio e un figlio di nome Aldo. A occhio potrebbe risultare molto facile, ma come tramutare il nostro pensiero in codice SQL?
La soluzione che ho studiato e implementato è la seguente, ma ovviamente nulla vieta di trovare soluzioni alternative (e magari segnalarle in modo da inserire il questo articolo).

Procediamo con una prima tappa e proviamo a selezionare prima tutti gli utenti che hanno un figlio di nome Aldo:

SELECT idPadre, GROUP_CONCAT( nome
ORDER BY nome ) AS listaFigli
FROM figli
GROUP BY idPadre
HAVING find_in_set( 'Aldo', listaFigli );

Otterremo come risultati:

idPadre listaFigli
1       Aldo,Giulio
2       Aldo
3       Aldo,Giulio,Paolo

Ma passiamo in dettaglio a spiegare la query MySQL che utilizza qualche specifica non utilizzata da molti Programmatori alle prime esperienze:
Con la specifica GROUP_CONCAT( nome ORDER BY nome ) ordiniamo tutti i nomi in ordine alfabetico relativi all’idPadre, tale array presenta come separatore di default la virgola, ma è possibile aggiungere un parametro che ne specifica uno diverso.
Con GROUP BY raggruppiamo per idPadre e aggiungiamo la clausola essenziale cioè che abbiano (HAVING) il valore aldo nella listaFigli e in questo caso abbiamo utilizzato l’interessantissima funzione MySQL find_in_set che ricerca un valore in un array.
E intuitivo da capire per un Programmatore MySQL Esperto o meno esperto che basta modificare questa query aggiungendo una nuova clausola find_in_set per ottenere ciò di cui abbiamo bisogno:

SELECT id_padre, GROUP_CONCAT( nome
ORDER BY nome ) AS listanomi
FROM figli
GROUP BY id_Padre
HAVING find_in_set( 'Aldo', listanomi )
AND find_in_set( 'Giulio', listanomi )

e così via fino a raggiungere la selezione desiderata.
Spero di essere stato utile con questa selezione di più righe con MySql. Più avanti potrei presentare un piccolo script nella sezione Programmatore PHP che possa rendere dinamico da codice PHP l’incremento o il decremento del filtro find_in_set.

PER ULTERIORI INFORMAZIONI:

Daniele Tabacco
Programmatore PHP | Web Developer | Consulente Web e SEO

PHP - MySql - AJAX - HTML5 - JAVASCRIPT - CSS - JSON/XML - JQuery
WebApps, Applicazioni, Realizzazione Siti Mobile per iPhone e Android
Programmatore PHP - Consulente Web Marketing Napoli, Roma, Milano, Firenze.
Tel.+39 329.11.73.918
email: daniele.tabacco[at]gmail.com
skype: daniele.tabacco

Il tuo nome (richiesto)

La tua email (richiesto)

Oggetto

Il tuo messaggio

 


POTREBBE INTERESSARTI ANCHE:
Un Esempio di una Piccola App costruita con le API Twitter mostra come cinguettare direttamente dal vostro sito Internet.
Piccoli Suggerimenti su come utilizzare e ottimizzare le query e i database MySQL ottimizzando il codice SQL o utilizzando al meglio le funzionalità PHP
Come Programmatore PHP e Consulente Web voglio parlarvi delle potenzialità di uno strumento che utilizziamo o che viene utilizzato in larga maniera da tutti noi e che può essere sfruttato per ottimizzare la conversione e i contatti della propria attivit
Usare PHP per inviare email con allegati, sfruttando la libreria PHPMailer e le conoscenze come Programmatore PHP, facilmente modificabile e personalizzabile per le vostre esigenze.
Guida su un programma che permette ad un Programmatore PHP lo sviluppo su Apple Mac


buzzoole code
Leggi altro:
Site Tools SEO: Uno strumento SEO completo su Google Chrome

La Realizzazione di un Sito Web e il relativo successo che ci si aspetta, è il giusto equilibrio tra Buono...

Chiudi