Query semplici

Gli argomenti di questa pagina

  • Prima di iniziare
  • Definizione
  • Sintassi base per una Query
  • Codice per eseguire le Query SELECT
  • Recuperare tutti i record ed un unica Colonna
  • Recuperare tutti i record e solo alcuni campi
  • Recuperare tutti i record e tutti i campi
  • Qualificare i nomi delle colonne (o campi)
  • Assegnare un ALIAS ad una colonna

Prima di iniziare

Innanzitutto verificare che esista il file che contiene i dati di connessione al DB.
In questo file verranno indicate le sole quattro variabili necessarie a stabilire la connessione al DB prima di compiere qualsiasi azione ed è questo file che includeremo in tutte le pagine che debbono lavorare col DB. Questi dati vengono forniti dall'host che abbiamo scelto per il nostro sito.

Il file db_login.php
1
2
3
4
5
6
<?php
$Host 
"hostname";
$User "username";
$Password "password";
$DBName "DBName";
?>

Questo che segue è un frammento di codice che sarà necesario per eseguire la connessione al DB ed alla esecuzione delle Query.

Questo frammento di codice va inserito nella pagina che deve eseguire operazioni col DB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n";
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n";
    } else {
        
mysql_set_charset("utf8"); 
        
//    esecuzione della Query
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            echo 
"Query eseguita<br />\n";
            
//    qui vengono eseguiti altri eventuali lavori
        
}
    }
}
@
mysql_close ($Link);
?>

Se si apre una connessione a MySQL all'interno del file PHP è possibile chiuderla con la funzione mysql_close(). Anche se non tutti i programmatori usano chiudere esplicitamente la connessione perchè lo trovano inutile, in quanto le connessioni MySQL sono solitamente chiuse per default alla fine dello script, è buona norma fare in modo che tutte le risorse vengano liberate dopo l'utilizzo del DB, usando la funzione mysql_close(). Ciò assicurerà che la connessione venga chiusa nella linea esatta nello script in cui si dice di chiudere.

Chiusura della connessione al DB
1
2
3
<?php
mysql_close 
($link);
?> 

Definizione

L'istruzione SELECT, più di tutte le altre istruzioni, è senz'altro l'istruzione più potente e più usata in MYSQL. E' la più potente e complessa e per mezzo di essa è possibile richiamare e mostrare i dati dalle tabelle create nel DB. L'istruzione SELECT è la base di ogni domanda che si intende rivolgere al DB. Queste domande sono tecnicamente chiamate Query.

La potenza dell'istruzione SELECT è dovuta alla sua ricca sintassi e nella sua forma più completa rappresenta senz'altro l'istruzione più complessa del linguaggio MYSQL. Le numerose parti, quasi tutte opzionali, di cui l'istruzione SELECT può essere composta, sono contraddistinte da una Clausola che svolge una determinata funzione all'interno dell'intera istruzione.

L'esecuzione della istruzione SELECT restituisce un Recordset pronto per la lettura ed è da questo oggetto che andremo a leggere i dati selezionati.
Il Recordset è una sorta di tabella virtuale in cui sono temporaneamente memorizzati i dati richiamati, tramite Query SELECT, da una o più tabelle. Proprio come una vera tabella un Resultset può contenere zero o più righe, zero o più colonne.
La posizione ed il numero delle colonne all'interno del Recordset dipende dall'ordine e numero con cui sono stati dichiarati nella istruzione SELECT. La conformazione di questa tabella virtuale sarà quindi basata sui nomi e sul tipo di colonne dichiarate nell'istruzione SELECT.
Per ogni riga prelevata dalla o dalle tabelle di origine viene inserita una nuova riga nel Recordset.
Se nella Query sono presenti instruzioni limitative le righe indesiderate verranno quindi rimosse.

Cominciamo subito nel vedere delle semplici Query usando alcune delle sintassi di base.

Per eseguire e mostrare i risultati delle Query presentate in questa pagina, verranno usati gli script mostrati nella pagina Creazione Esecuzione Visualizzare Query . Io suggerirei di usare il secondo esempio in quanto, eseguita una Query è possibile ricavare il nome dei campi coinvolti in qualsiasi Query.

Sintassi base per una Query

SELECT elenco_campi FROM nome_tabella

Partendo da questa sintassi possiamo provare come salire sù sù per query più complesse.
Questi sono i campi della tabella sql_citta e su cui eseguiremo delle prove:

id, cap, citta, prov

In una istruzione SELECT è possibile richiamare una o più colonne da una o più tabelle. Iniziamo con una semplicissima Query.

Codice per eseguire le Query SELECT

Normalmente una Query SELECT restituisce un resultset che è una tabella virtuale. I dati di questa tabella normalmente vanno intabellati e per intabellarli lo script mostrato ad apertura della pagina va completato a partire dalla istruzione
$result = mysql_query($Query);
come mostrato qui in basso.
Prima di passare al cuore dello script che inizia col ciclo while facciamo alcune operazioni:
contiamo i record recuperati con la funzione mysql_num_fields
recuperiamo i nomi dei campi coinvolti nella Query con la funzione mysql_field_name
Quindi iniziamo a creare la tabella che ospiterà i dati visualizzando i campi letti nella intestazione della tabella.
Fatto questo possiamo passare al ciclo while per leggere e visualizzare in maniera ordinata i dati.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        if (
$result mysql_query($Query)) {
            
$num_row mysql_num_rows($result);
            
$numfields mysql_num_fields($result);
            
$fields = array();
            for (
$i=0$i $numfields$i++) {
                
$fields[] = mysql_field_name($result$i);
            }
            if (
$num_row 0) {
                echo 
$num_row " record letti<br />\n";
                echo 
"<table class=\"tabella_it\">\n";        
                echo 
"<tr>\n";
                for (
$i=0$i $numfields$i++) {
                    echo 
"<th>" $fields[$i] . "</th>\n";
                }
                echo 
"</tr>\n";
                while (
$row mysql_fetch_array($result)) {
                    echo 
"<tr>\n";
                    for (
$i=0$i $numfields$i++) {
                        echo 
"<td>";
                        echo 
is_null($row[$fields[$i]]) ? 'NULL' $row[$fields[$i]];
                        echo 
"</td>\n";
                    }
                    echo 
"</tr>\n";
                }
                echo 
"</table>\n";
            } else {
                echo 
"Nessun record restituito<br />\n";
            }
        } else {
            echo 
mysql_error() . "<br />\n"
        }
    }
}
mysql_close ($link);

Recuperare tutti i record ed un unica Colonna

In questa Query chiederemo al DB di mostrarci le città di tutti i record registrati nella tabella

esempio 1
1
2
3
4
<?php
$Query 
"SELECT citta
FROM sql_citta"
;
?>
38 record trovati
15 record visualizzati
citta
AbanoTerme
Abbadia Lariana
Agropoli
Bevagna
Borgo S. Dalmazzo
Castel Vittorio
Cereseto
Coccanile
Condofuri
Corinaldo
Correzzana
Falconara Alta
Giusvalla
Marsiliana
Massarosa
...

Recuperare tutti i record e solo alcuni campi

Una volta imparato a scrivere una istruzione SELECT, diventa facile ed intuitivo indicare più nomi di campi nel numero desiderato e nell'ordine desiderato. E' sufficiente indicare i nomi dei campi che desideriamo dopo la clausola SELECT separandoli da una virgola. In questo esempio ne indichiamo solo due.

esempio 2
1
2
3
4
<?php
$Query 
"SELECT citta, prov
FROM sql_citta"
;
?>
38 record trovati
15 record visualizzati
citta prov
AbanoTerme PD
Abbadia Lariana LC
Agropoli GH
Bevagna PG
Borgo S. Dalmazzo CN
Castel Vittorio IM
Cereseto PR
Coccanile FE
Condofuri RC
Corinaldo AN
Correzzana MB
Falconara Alta AN
Giusvalla SV
Marsiliana GR
Massarosa LU
... ...

Nell'esempio 3 vengono indicati tre campi.

esempio 3
1
2
3
4
<?php
$Query 
"SELECT citta, cap, prov
FROM sql_citta"
;
?>
38 record trovati
15 record visualizzati
citta cap prov
AbanoTerme 35031 PD
Abbadia Lariana 23821 LC
Agropoli 56011 GH
Bevagna 06031 PG
Borgo S. Dalmazzo 12011 CN
Castel Vittorio 18037 IM
Cereseto 43050 PR
Coccanile 44030 FE
Condofuri 89030 RC
Corinaldo 60013 AN
Correzzana 20050 MB
Falconara Alta 60015 AN
Giusvalla 17010 SV
Marsiliana 58010 GR
Massarosa 55060 LU
... ... ...

Recuperare tutti i record e tutti i campi

E' possibile estrarre tutti i campi con la stessa facilità con cui se ne richiama uno solo o più. Tutti i nomi dei campi vengono indicati dopo l'istruzione SELECT avendo l'accortezza di separare gli uni dagli altri con una virgola.
L'ordine dei campi da scrivere nella clausola è ininfluente. Nell'esempio qui sotto vengono richiamati tutti i campi della tabella sql_citta e vengono scritti nell'ordine in cui i campi sono registrati nella tabella MYSQL, ma in realtà possono essere scritti seguendo un ordine arbitrario.

esempio 4
1
2
3
4
<?php
$Query 
"SELECT id, cap, citta, prov
FROM sql_citta"

?>
38 record trovati
15 record visualizzati
id cap citta prov
1 35031 AbanoTerme PD
2 23821 Abbadia Lariana LC
3 56011 Agropoli GH
5 06031 Bevagna PG
6 12011 Borgo S. Dalmazzo CN
7 18037 Castel Vittorio IM
8 43050 Cereseto PR
9 44030 Coccanile FE
10 89030 Condofuri RC
12 60013 Corinaldo AN
13 20050 Correzzana MB
14 60015 Falconara Alta AN
15 17010 Giusvalla SV
18 58010 Marsiliana GR
19 55060 Massarosa LU
... ... ... ...

Per richiamare tutti i campi di una tabella è possibile usare una scorciatoia che consiste nell'indicare un asterisco ( * ) dopo la clausola SELECT senza doverle per questo elencarli dopo la clausola SELECT. In questo caso le colonne verranno necessariamente restituite con l'ordine che occupano nella tabella

esempio 5
1
2
3
4
<?php
$Query 
"SELECT *
FROM sql_citta"
;
?>
38 record trovati
15 record visualizzati
id cap citta prov
1 35031 AbanoTerme PD
2 23821 Abbadia Lariana LC
3 56011 Agropoli GH
5 06031 Bevagna PG
6 12011 Borgo S. Dalmazzo CN
7 18037 Castel Vittorio IM
8 43050 Cereseto PR
9 44030 Coccanile FE
10 89030 Condofuri RC
12 60013 Corinaldo AN
13 20050 Correzzana MB
14 60015 Falconara Alta AN
15 17010 Giusvalla SV
18 58010 Marsiliana GR
19 55060 Massarosa LU
... ... ... ...

Qualificare i nomi delle colonne (o campi)

Oltre ai modi appena visti qui sopra è possibile qualificare i nomi di colonna, cioè indicare prima del nome del campo la tabella a cui essi appartengono separandolo da un punto.

tabella.campo

Questo metodo è indicato, anzi, necessario quando con la Query si intende estrarre i record da due o più tabelle. Tuttavia non è vietato, anche se inutile, quando si lavora con una sola tabella.

esempio 6
1
2
3
4
5
6
7
<?php
$Query 
"SELECT sql_citta.id, 
    sql_citta.citta, 
    sql_citta.cap, 
    sql_citta.prov
FROM sql_citta"

?>
38 record trovati
15 record visualizzati
id citta cap prov
1 AbanoTerme 35031 PD
2 Abbadia Lariana 23821 LC
3 Agropoli 56011 GH
5 Bevagna 06031 PG
6 Borgo S. Dalmazzo 12011 CN
7 Castel Vittorio 18037 IM
8 Cereseto 43050 PR
9 Coccanile 44030 FE
10 Condofuri 89030 RC
12 Corinaldo 60013 AN
13 Correzzana 20050 MB
14 Falconara Alta 60015 AN
15 Giusvalla 17010 SV
18 Marsiliana 58010 GR
19 Massarosa 55060 LU
... ... ... ...

Assegnare un ALIAS ad una colonna

Questa è un'altra possibilità che ci offre il MYSQL: dare un ALIAS, cioè un nome che più ci piace ad una o più colonne, ma in seguito vedremo che possiamo o, in certe circostanze persino obbligatorio, farlo anche con le tabelle. La visualizzazione del campo che ha avuto un alias verrà visualizzato con quel nome.
In questo esempio non sarebbe stato necessario ma è stato fatto solo per un motivo dimostrativo. Più avanti, quando si parlerà di campi calcolati, vedremo come questa pratica sia utile per la comprensione di quel che stiamo mostrando.

esempio 7
1
2
3
4
5
6
7
<?php
$Query 
"SELECT sql_citta.id, 
    citta, 
    cap AS cod_avv_post, 
    prov
FROM sql_citta"

?>
38 record trovati
15 record visualizzati
id citta cod_avv_post prov
1 AbanoTerme 35031 PD
2 Abbadia Lariana 23821 LC
3 Agropoli 56011 GH
5 Bevagna 06031 PG
6 Borgo S. Dalmazzo 12011 CN
7 Castel Vittorio 18037 IM
8 Cereseto 43050 PR
9 Coccanile 44030 FE
10 Condofuri 89030 RC
12 Corinaldo 60013 AN
13 Correzzana 20050 MB
14 Falconara Alta 60015 AN
15 Giusvalla 17010 SV
18 Marsiliana 58010 GR
19 Massarosa 55060 LU
... ... ... ...

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum