Informazioni sui record
Gli argomenti di questa pagina
- Prima di iniziare
- Contare i record di una tabella con la funzione COUNT()
- Contare i record di una tabella con la funzione mysql_num_rows()
- Contare i record restituiti da una Query
- Lunghezza di un campo: LENGTH( campo )
- Il campo più lungo ed il campo più corto con MAX, MIN, e LENGTH
|
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); ?>
|
A volte è necessario o quanto meno utile conoscere il numero di record che stiamo elaborando. Qui di seguito vediamo alcuni dei metodi che possiamo usare.
Vedremo qui di seguito alcune funzioni per ottenere il numero di record
- usare la funzione Count()
- usare la funzione mysql_num_rows()
Vedremo poi
- come contare tutti i record di una tabella
- come contare i record restituiti da una Query
Da precisare che entrambe usano una Query sulla tabella.
Entrambe sono adatte per restituire tutti i record di una tabella.
Ma è la seconda la più indicata per contare i record restituiti da una Query.
Contare i record di una tabella con la funzione COUNT()
Iniziamo con la funzione Count().
La sintassi è:
SELECT COUNT(*) FROM tabella;
oppure
SELECT COUNT(colonna) FROM tabella;
Tra le due forme l'istruzione COUNT(*) contrariamente a COUNT(colonna) restituisce un conteggio del numero di righe recuperate, anche se alcuni campi contengono valori NULL. La sua esecuzione è anche più rapida e precisa dell'istruzione COUNT(colonna) in quanto questa seconda sintassi non tiene conto di eventuali valori NULL nella colonna indicata.
Qui di seguito la Query per leggere i record di una tabella ed il relatico codice PHP per visualizzare il numero di record letti
1
2
3
|
<?php $Query = "SELECT COUNT(*) AS tot_row FROM sql_rubrica;"; ?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php include ('res/db_login.php'); if (!$link = mysql_connect($Host, $User, $Password)) { echo mysql_error() . "<br />\n"; } else { if (!mysql_select_db($DBName, $link)) { echo mysql_error() . "<br />\n"; } else { mysql_set_charset("utf8"); $result = mysql_query($Query); if (!$result) { echo mysql_error() . "<br />\n"; } else { $row = mysql_fetch_array($result); echo $row['tot_row'] . " record trovati<br />\n"; } } } mysql_close ($link); ?>
|
Questo il risultato ottenuto per la tabella sql_rubrica
101 record trovati
Contare i record di una tabella con la funzione mysql_num_rows()
Ora vediamo come ricavare il numero dei record con la funzione mysql_num_rows().
La sintassi è:
mysql_num_rows(result)
result è il resultset ottenuto con la funzione mysql_query()
Qui di seguito la Query per leggere i record di una tabella ed il relatico codice PHP per visualizzare il numero di record letti
1
2
3
|
<?php $Query = "SELECT * FROM sql_rubrica;"; ?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?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"); $result = mysql_query($Query); if (!$result) { echo mysql_error() . "<br />\n"; } else { $num_row = mysql_num_rows($result); echo $num_row . " record trovati<br />\n"; } } } mysql_close ($link); ?>
|
Questo il risultato ottenuto per la tabella sql_rubrica
101 record trovati
Contare i record restituiti da una Query
come specificato ad inizio pagina è possibile ottenere il numero dei record letti tramite un qualsiasi tipo di Query. Il modo più comodo è quello che usa la funzione mysql_num_rows().
Qui di seguito la Query per leggere i record di una tabella ed il relatico codice PHP per visualizzare il numero di record letti
1
2
3
|
<?php $Query = "SELECT * FROM sql_rubrica WHERE citta = 'Giusvalla';"; ?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php include ('res/db_login.php'); if (!$link = mysql_connect($Host, $User, $Password)) { echo mysql_error() . "<br />\n"; } else { if (!mysql_select_db($DBName, $link)) { echo mysql_error() . "<br />\n"; } else { mysql_set_charset("utf8"); $result = mysql_query($Query); if (!$result) { echo mysql_error() . "<br />\n"; } else { $num_rec = mysql_num_rows($result); echo $num_rec . " record trovati<br />\n"; } } } mysql_close ($link); ?>
|
Questo il risultato ottenuto per la tabella sql_rubrica
19 record trovati
Lunghezza di un campo: LENGTH( campo )
Oltre a queste ed altre funzioni ce n'è una che potrebbe tornare utile. La funzione è LENGTH( campo ) che restituisce la dimensione del valore memorizzato in un preciso campo.
Questa funzione può tornare utile sia per conoscere la lunghezza della stringa di uno specifico campo o per limitare un resultset in base a tale lunghezza.
Qui di seguito è possibile osservare due Query:
- la prima restituisce la lunghezza delle stringhe memorizzate nel campo 'citta'
- la seconda accetta solo i record in cui il campo citta ha una stringa più lunga di 9 caratteri
1
2
3
4
5
6
7
8
9
10
|
<?php $Query_1 = "SELECT cap, citta, prov, LENGTH( citta ) AS citta_len FROM sql_citta ORDER BY citta_len";
$Query_2 = "SELECT cap, citta, prov FROM sql_citta WHERE LENGTH( citta ) > 9 ORDER BY LENGTH( citta )"; ?>
|
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);
|
Questi sono i risultati che si ottengono con le due Query
38 record trovati
15 record visualizzati
cap |
citta |
prov |
citta_len |
29010 |
Godi |
PC |
4 |
31037 |
Loria |
TV |
5 |
21030 |
Cuvio |
VA |
5 |
80125 |
Agnano |
NA |
6 |
80070 |
Fusaro |
NA |
6 |
56017 |
Agnano |
PI |
6 |
38030 |
Varena |
TN |
6 |
98031 |
Capizzi |
ME |
7 |
21020 |
Daverio |
VA |
7 |
06031 |
Bevagna |
PG |
7 |
40059 |
Medicina |
BO |
8 |
43050 |
Cereseto |
PR |
8 |
56011 |
Agropoli |
GH |
8 |
02011 |
Accumoli |
RI |
8 |
89030 |
Condofuri |
RC |
9 |
... |
... |
... |
... |
|
15 record trovati
15 record visualizzati
cap |
citta |
prov |
35031 |
AbanoTerme |
PD |
20050 |
Correzzana |
MB |
58010 |
Marsiliana |
GR |
95040 |
Borgo lupo |
CT |
81010 |
Gallo matese |
CE |
67010 |
Ville di Fano |
AQ |
36078 |
Castelvecchio |
VI |
60015 |
Falconara Alta |
AN |
22010 |
Dosso del liro |
CO |
23821 |
Abbadia Lariana |
LC |
18037 |
Castel Vittorio |
IM |
39013 |
Moso in passiria |
BZ |
12011 |
Borgo S. Dalmazzo |
CN |
67020 |
Castelvecchio calvisio |
AQ |
12040 |
Isola di bene vagienna |
CN |
|
Il campo più lungo ed il campo più corto con MAX, MIN, e LENGTH
l'abbinamento di queste funzioni può restituirci il valore più lungo e quello più breve tra quelli memorizzati in una tabella.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php $Query_1 = "SELECT MAX( LENGTH( citta ) ) AS maximum, citta FROM sql_citta WHERE LENGTH( citta ) = ( SELECT MAX( LENGTH( citta ) ) FROM sql_citta ) GROUP BY citta";
$Query_2 = "SELECT MIN( LENGTH( citta ) ) AS minimum, citta FROM sql_citta WHERE LENGTH( citta ) = ( SELECT MIN( LENGTH( citta ) ) FROM sql_citta ) GROUP BY citta"; ?>
|
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
|
<?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"); $result = mysql_query($Query); $num_row = mysql_num_rows($result); $numfields = mysql_num_fields($result); if (!$result) { echo mysql_error() . "<br />\n"; } else { $fields = array(); for ($i=0; $i < $numfields; $i++) { $fields[] = mysql_field_name($result, $i); } $row = mysql_fetch_array($result); echo $num_row . " record restituiti<br />\n"; echo "<table class=\"tabella_it\">"; echo "<tr>\n"; for ($i=0; $i < $numfields; $i++) { echo "<th>" . $fields[$i] . "</th>\n"; } echo "</tr>\n"; echo "<tr>\n"; for ($i=0; $i < $numfields; $i++) { echo "<td>" . $row[$fields[$i]] . "</td>\n"; } echo "</tr>\n"; echo "</table>\n"; } } } mysql_close ($link); ?>
|
Questi sono i risultati che si ottengono con le due Query
2 record restituiti
maximum |
citta |
22 |
Castelvecchio calvisio |
|
1 record restituiti
|