Tutte le categorie
COME SVILUPPARE UN SITO IN WORDPRESS LEZIONE 5
Giuliano Angrisani |
Skill Factory - 28/04/2016 10:48:52 | in Tutorials
Nella lezione precedente abbiamo visto come scaricare ed installare un Tema, in questa lezione vedremo come creare un Articolo con Wordpress.
Dalla pagina amministratore, nel pannello sulla sinistra, cliccate sulla voce Articoli.
Nella nuova pagina appaiono tutti gli articoli nel vostro sito (di default c'è già l'articolo Ciao Mondo!)
Per creare un nuovo Articolo cliccate sulla voce Aggiungi Nuovo, l'immagine seguente mostra la pagina per creare l'articolo.
La pagina per la creazione di un Articolo di Wordpress è organizzata nel modo seguete:
1) nella parte superiore è possibile inserire il Titolo dell'articolo;
2) sotto c'è il pulsante Aggiungi Media con il quale potete inserire immagini, video o documenti all'interno dell'articolo;
3) segue l'area in cui è presente il corpo dell'articolo, la barra degli strumenti di questo campo, è simile a quella di Word, permette di formattare il testo, inserire link, ecc.
4) nella barra laterale di destra ci sono i riquadri per pubblicare o programmare l’articolo, selezionare le categorie di appartenenza del post e digitare dei tag che siano attinenti all’argomento trattato oppure dare un formato specifico per l'articolo.
Per pubblicare l’articolo che avete scritto, basta cliccare sul pulsante Pubblica, mentre se volete programmarlo in modo che venga pubblicato automaticamente dal blog ad un giorno ed un orario prestabiliti, cliccate sulla voce Modifica collocata accanto alla dicitura Pubblica subito e specificate nei campi che compaiono la data e l’ora di pubblicazione del post, prima di cliccare su Pubblica.
Nella sezione Formato potete cambiare il formato dell'articolo. Il formato è un’informazione che può essere utilizzata dal Tema per modificare la visualizzazione di un articolo.
La lista dei formati è standard e tutti i temi possono farne uso. Non è necessario supportare tutti i formati della lista, ma è possibile abilitarne solo una parte, mentre non è possibile aggiungere nuovi formati, né tramite plugin (che vedremo in futuro), né attraverso i temi.
Per quanto riguarda le categorie ed i tag a cui collegare gli articoli, non ci sono delle vere e proprie regole.
Le categorie sono delle sezioni del blog molto generiche in cui si vanno a raggruppare i post che sono correlati da uno stesso argomento (ad esempio articoli sulle recensioni dei film potrebbero far parte della categoria Cinema e Spettacoli), mentre i tag sono delle etichette aggiuntive che ti permettono di entrare più nello specifico (riferendoci all'esempio precedente possiamo creare i tag Film,Recensione ).
Puoi creare nuove categorie cliccando sull’apposita opzione nella barra laterale di destra dell’editor di Wordpress, mentre per creare nuovi tag basta digitarli nel riquadro Tag articolo.
Infine è possibile caricare un'Immagine in Evidenza che fungerà da anteprima dell'articolo (thumbnails) all'interno del sito.
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I
Ricominciamo ... dal linguaggio SQL Lezione 12
Gino Visciano |
Skill Factory - 26/04/2016 23:39:50 | in Tutorials
Benvenuti alla dodicesima lezione, in questa nuova lezione vedrete la clausola Group By del comando Select.
Il comando Select utilizza la clausola Group By combinata con le funzioni statistiche per ottenere viste con SUBTOTALI, in base alle chiavi di raggruppamento indicate.
Per capire come funziona la clausola Group By partiamo dalla query seguente, che ordina il contenuto della tabella utilizzando come chiave di ordinamento il nominativo del cliente.
select fat.num_fat, fat.data, cli.nominativo, fat.imponibile, ts.tipo_scadenza from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) order by cli.nominativo;
num_fat | data | nominativo | imponibile | tipo_scadenza |
0015/16 | 2016-03-31 | Aldebran | 800.00 | 30 DFFM |
0009/16 | 2016-02-29 | Aldebran | 1800.00 | 30 DFFM |
0003/16 | 2016-01-15 | Aldebran | 1500.00 | 30 DFFM |
0016/16 | 2016-03-31 | Cassandra | 1600.00 | 30 DFFM |
0010/16 | 2016-02-29 | Cassandra | 600.00 | 30 DFFM |
0004/16 | 2016-01-15 | Cassandra | 500.00 | 30 DFFM |
0008/16 | 2016-02-29 | Fiorini & Figli | 2100.00 | 30 gg DF |
0002/16 | 2016-01-15 | Fiorini & Figli | 2000.00 | 30 gg DF |
0014/16 | 2016-03-31 | Fiorini & Figli | 900.00 | 30 gg DF |
0013/16 | 2016-03-31 | Morgan & C. | 1900.00 | 30 gg DF |
0007/16 | 2016-02-29 | Morgan & C. | 1500.00 | 30 gg DF |
0001/16 | 2016-01-15 | Morgan & C. | 1000.00 | 30 gg DF |
0017/16 | 2016-03-31 | Pedretti | 2000.00 | 60 gg DF |
0011/16 | 2016-02-29 | Pedretti | 1900.00 | 60 gg DF |
0005/16 | 2016-01-15 | Pedretti | 1800.00 | 60 gg DF |
0018/16 | 2016-03-31 | Staiano | 1000.00 | 60 DFFM |
0012/16 | 2016-02-29 | Staiano | 900.00 | 60 DFFM |
0006/16 | 2016-01-29 | Staiano | 800.00 | 60 DFFM |
La tabella che si ottine eseguendo la query, appare ordinata in base alla colonna nominativo cliente, il punto in cui cambia il nominativo del cliente si chiama rottura di codice ed indica la fine del gruppo precedente e l'inizio del gruppo seguente. Ogni gruppo caratterizzato dalla rottura di codice è una SOTTOTABELLA a cui si possono applicare le funzioni statistiche se si utilizza la clausola Group By.
Vediamo alcuni esempi:
1) Qual è il fatturato di ogni cliente?
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo;
nominativo | fatturato |
Aldebran | 4100.00 |
Cassandra | 2700.00 |
Fiorini & Figli | 5000.00 |
Morgan & C. | 4400.00 |
Pedretti | 5700.00 |
Staiano | 2700.00 |
Attenzione, quando usate la clausola Group By, non dimenticate che le colonne della select devono corrispondere alle chiavi di raggruppamento e alle funzioni statistiche da utilizzare.
2) Qual è il fatturato di ogni cliente e quante fatture ha emesso?
select cli.nominativo, count(*) as "fatture emesse", sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo;
nominativo | fatture emesse | fatturato |
Aldebran | 3 | 4100.00 |
Cassandra | 3 | 2700.00 |
Fiorini & Figli | 3 | 5000.00 |
Morgan & C. | 3 | 4400.00 |
Pedretti | 3 | 5700.00 |
Staiano | 3 | 2700.00 |
3) Quali clienti in totale hanno fatto un fatturato inferiore a €5000.00?
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo having sum(fat.imponibile)<5000.00;
oppure
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo having fatturato<5000.00;
nominativo | fatturato |
Aldebran | 4100.00 |
Cassandra | 2700.00 |
Morgan & C. | 4400.00 |
Staiano | 2700.00 |
La clausola Having permette di inserire una condizione di selezione sul risultato del Group By.
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I
Ricominciamo ... dal linguaggio SQL Lezione 11
Gino Visciano |
Skill Factory - 25/04/2016 22:59:46 | in Tutorials
Benvenuti all'undicesima lezione, in questa nuova lezione vedrete le funzioni statistiche del comando Select.
Le funzioni statistiche sono molto utili perché forniscono informazioni di aggregazione rispetto a tutti i dati presenti nelle colonne numeriche indicate.
Le principali funzioni statistiche sono le seguenti:
- SUM(NomeColonna) Somma i valori della colonna indicata, si può applicare solo a colonne numeriche;
- AVG(NomeColonna) Calcola la Media dei valori della colonna indicata, si può applicare solo a colonne numeriche;
- MIN(NomeColonna) Restituisce il valore Minimo della colonna indicata, si può applicare solo a colonne numeriche;
- MAX(NomeColonna) Restituisce il valore Massimo della colonna indicata, si può applicare solo a colonne numeriche;
- COUNT(NomeColonna) Si usa per contareil numero di righe della tabella, si può applicare a qualunque tipo di colonna, spesso si usa nella forma COUNT(*).
Ad esempio per conoscere il numero di dipendenti inserito nella tabella Dipendenti, su può usare il comando seguente:
Select count(*) from Dipendenti;
10
Per vedere praticamente come si usano le funzioni statistiche eseguite prima gli step seguenti, nel Database azienda:
STEP 1: Creare la tabella Clienti.
use azienda;
create table clienti (
id int auto_increment Primary Key,
nominativo varchar(100),
piva char(11) unique,
indirizzo varchar(100),
localita varchar(50),
provincia char(2));
STEP 2: Creare la tabella Fatture.
use azienda;
create table fatture (
id int auto_increment Primary Key,
num_fat varchar(20) unique,
data date,
id_cliente int,
imponibile decimal(9,2),
id_tipo_scadenza int);
use azienda;
create table tipo_scadenza (
id int auto_increment Primary Key,
tipo_scadenza varchar(100));
STEP 3: Inserimento Clienti.
use azienda;
insert into clienti (nominativo, localita, provincia) values ('Morgan & C.', 'Roma','RM');
insert into clienti (nominativo, localita, provincia) values ('Fiorini & Figli', 'Napoli','NA');
insert into clienti (nominativo, localita, provincia) values ('Aldebran', 'Milano','MI');
insert into clienti (nominativo, localita, provincia) values ('Cassandra', 'Roma','RM');
insert into clienti (nominativo, localita, provincia) values ('Pedretti', 'Napoli','NA');
insert into clienti (nominativo, localita, provincia) values ('Staiano', 'Milano','MI');
STEP 4: Inserimento Tipo_scadenza.
use azienda;
insert into tipo_scadenza (tipo_scadenza) values ('Rimessa diretta');
insert into tipo_scadenza (tipo_scadenza) values ('30 gg DF');
insert into tipo_scadenza (tipo_scadenza) values ('30 DFFM');
insert into tipo_scadenza (tipo_scadenza) values ('60 gg DF');
insert into tipo_scadenza (tipo_scadenza) values ('60 DFFM');
insert into tipo_scadenza (tipo_scadenza) values ('90 gg DF');
insert into tipo_scadenza (tipo_scadenza) values ('90 DFFM');
STEP 5: Inserimento Fatture.
use azienda;
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0001/16', '2016/01/15', 1,1000.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0002/16', '2016/01/15', 2,2000.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0003/16', '2016/01/15', 3,1500.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0004/16', '2016/01/15', 4,500.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0005/16', '2016/01/15', 5,1800.00,4);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0006/16', '2016/01/29', 6,800.00,5);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0007/16', '2016/02/29', 1,1500.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0008/16', '2016/02/29', 2,2100.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0009/16', '2016/02/29', 3,1800.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0010/16', '2016/02/29', 4,600.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0011/16', '2016/02/29', 5,1900.00,4);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0012/16', '2016/02/29', 6,900.00,5);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0013/16', '2016/03/31', 1,1900.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0014/16', '2016/03/31', 2,900.00,2);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0015/16', '2016/03/31', 3,800.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0016/16', '2016/03/31', 4,1600.00,3);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0017/16', '2016/03/31', 5,2000.00,4);
insert into fatture (num_fat, data, id_cliente, imponibile, id_tipo_scadenza) values ('0018/16', '2016/03/31', 6,1000.00,5);
Dopo che avete completato i 5 step, potete usare le tabelle create e popolate per vedere come si usano le funzioni statistiche del comando Select, di seguito vediamo alcuni esempi:
La query seguente mette in relazione tutte le tabelle create e ne visualizza il contenuto:
select fat.num_fat, fat.data, cli.nominativo, fat.imponibile, ts.tipo_scadenza from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) order by cli.nominativo;
num_fat | data | nominativo | imponibile | tipo_scadenza |
0015/16 | 2016-03-31 | Aldebran | 800.00 | 30 DFFM |
0009/16 | 2016-02-29 | Aldebran | 1800.00 | 30 DFFM |
0003/16 | 2016-01-15 | Aldebran | 1500.00 | 30 DFFM |
0016/16 | 2016-03-31 | Cassandra | 1600.00 | 30 DFFM |
0010/16 | 2016-02-29 | Cassandra | 600.00 | 30 DFFM |
0004/16 | 2016-01-15 | Cassandra | 500.00 | 30 DFFM |
0008/16 | 2016-02-29 | Fiorini & Figli | 2100.00 | 30 gg DF |
0002/16 | 2016-01-15 | Fiorini & Figli | 2000.00 | 30 gg DF |
0014/16 | 2016-03-31 | Fiorini & Figli | 900.00 | 30 gg DF |
0013/16 | 2016-03-31 | Morgan & C. | 1900.00 | 30 gg DF |
0007/16 | 2016-02-29 | Morgan & C. | 1500.00 | 30 gg DF |
0001/16 | 2016-01-15 | Morgan & C. | 1000.00 | 30 gg DF |
0017/16 | 2016-03-31 | Pedretti | 2000.00 | 60 gg DF |
0011/16 | 2016-02-29 | Pedretti | 1900.00 | 60 gg DF |
0005/16 | 2016-01-15 | Pedretti | 1800.00 | 60 gg DF |
0018/16 | 2016-03-31 | Staiano | 1000.00 | 60 DFFM |
0012/16 | 2016-02-29 | Staiano | 900.00 | 60 DFFM |
0006/16 | 2016-01-29 | Staiano | 800.00 | 60 DFFM |
Partendo da questa tabella, usando le funzioni statistiche, potete rispondere alle domande seguenti:
1) Quante fatture sono state inserite nella tabella fatture?
use azienda;
select count(*) from fatture;
18
2) Qual è il valore totale del fatturato inserito nella tabella fatture?
use azienda;
select sum(imponibile) from fatture;
24600.00
3) Qual è il valore medio del fatturato inserito nella tabella fatture?
use azienda;
select avg(imponibile) from fatture;
1366.66
4) Qual è il fatturato minimo inserito nella tabella fatture?
use azienda;
select min(imponibile) from fatture;
500.00
5) Qual è il fatturato massimo inserito nella tabella fatture?
use azienda;
select max(imponibile) from fatture;
2100.00
6) Quante fatture sono state inserite nella tabella fatture nel il mese di gennaio?
use azienda;
select count(*) from fatture where data>='2016-01-01' and data<='2016-01-31';
6
7) Qual è il fatturato totale inserito nella tabella fatture nel mese di gennaio?
use azienda;
select sum(imponibile) from fatture where data>='2016-01-01' and data<='2016-01-31';
7600.00
8) Qual è il fatturato totale del cliente Cassandra inserito nella tabella fatture?
use azienda;
select clienti.nominativo, sum(fatture.imponibile) from fatture join clienti on (fatture.id_cliente=clienti.id) where clienti.nominativo='Cassandra';
Cassandra 2700.00
9) Qual è il fatturato totale dei clienti di Roma inserito nella tabella fatture?
use azienda;
select clienti.localita, sum(fatture.imponibile) from fatture join clienti on (fatture.id_cliente=clienti.id) where clienti.localita='Roma';
Roma 7100,00
10) Qual è il fatturato totale dei clienti di Roma inserito nella tabella fatture nel mese di gennaio?
use azienda;
select clienti.localita, sum(fatture.imponibile) from fatture join clienti on (fatture.id_cliente=clienti.id) where clienti.localita='Roma' and data>='2016-01-01' and data<='2016-01-31';
Roma 1500.00
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I
Ricominciamo ... dal linguaggio SQL Lezione 10
Gino Visciano |
Skill Factory - 25/04/2016 00:21:34 | in Tutorials
Benvenuti alla decima lezione, in questa lezione imparerete ad applicare il Self Join. Un Self Join non è altro che un Join applicato alla stessa tabella.
Per capire come funziona questo tipo di Join, immaginate di avere una tabella Dipendenti, in cui è presente anche l'id del responsabile di ogni dipendente. La particolarità di questa tabelle è che il responsabile di un dipendente è anche lui un dipendente, quindi è presente nella stessa tabella.
La caratteristica importante della tabella Dipendenti è che contine contemporaneamente, sia la chiave primaria, che la chiave esterna, come mostra l'immagine seguente:
Per distinguere le due tabelle con lo stesso nome dovete usare due alias di tabella differenti, come mostra l'esempio seguente:
SELECT col1,col2, ..., coln FROM tabella_a AS a JOIN tabella_a AS b ON ( ... );
Per vedere come si applica praticamente un Self Join, facciamo le seguenti considerazioni:
1) Rossi Alberto è l'Amministratore dell'azienda quindi non ha responsabili;
2) Verdi Carlo è il Direttore Generale dell'Azienda, il suo responsabile è Rossi Alberto;
3) Bianchi Silvia è il Direttore Commerciale dell'Azienda, il suo Responsabile è Verdi Carlo;
4) Neri Mara è il Responsabile delle Risorse Umane, il suo Responsabile è Verdi Carlo;
5) Rossi Luca è un Commerciale, il suo Responsabile è Bianchi Silvia;
6) Verdi Laura è un Commerciale, il suo Responsabile è Bianchi Silvia;
7) Bianchi Loredana è una Segretaria, il suo Responsabile è Neri Mara;
8) Rossi Valentina è un'Addetta all'Amministrazione, il suo Responsabile è Neri Mara;
9) Bianchi Paola è un'Addetta all'Amministrazione, il suo Responsabile è Neri Mara;
10) Neri Marcella è un'Addetta alla Reception, il suo Responsabile è Neri Mara;
Per creare il Database Azienda, implementate lo Schema Fisico seguente:
Attraverso i comandi seguenti potete implementare il Database Azienda, in MySQL, se state usando un DBMS diverso potrebbero esserci delle differenze.
I comandi devono essere eseguiti nella sezione SQL del pannello di controllo phpMyAdmin.
STEP 1: Creazione del Database Azienda
1) Create il Database:
create database azienda;
2) Create la tabella Dipendenti:
use azienda; -- connettiti al db azienda
create table dipendenti (
id int AUTO_INCREMENT PRIMARY KEY,
matricola char(5) UNIQUE,
cognome varchar(50) NOT NULL,
nome varchar(50) NOT NULL,
cod_fisc char(16) UNIQUE,
luogo_di_nascita varchar(50),
data_di_nascita date,
id_ruolo int NOT NULL,
id_responsabile int);
3) Create la tabella Ruoli:
use azienda; -- connettiti al db azienda
create table ruoli (
id int AUTO_INCREMENT PRIMARY KEY,
ruolo varchar(50) NOT NULL);
STEP 2: Inserire i ruoli nella Tabella Ruoli
use azienda; -- connettiti al db azienda
insert into ruoli (ruolo) values ('Amministratore');
insert into ruoli (ruolo) values ('Direttore Generale');
insert into ruoli (ruolo) values ('Direttore Commerciale');
insert into ruoli (ruolo) values ('Reaponsabile Risorse Umane');
insert into ruoli (ruolo) values ('Commerciale');
insert into ruoli (ruolo) values ('Segretaria');
insert into ruoli (ruolo) values ('Addetto Amministrazione');
insert into ruoli (ruolo) values ('Addetto Reception');
insert into ruoli (ruolo) values ('Addetto Delivery');
insert into ruoli (ruolo) values ('Responsabile Sicurezza');
Il risultato del lavoro fatto è il seguente:
select * from ruoli:
1 | Amministratore |
2 | Direttore Generale |
3 | Direttore Commerciale |
4 | Reaponsabile Risorse Umane |
5 | Commerciale |
6 | Segretaria |
7 | Addetto Amministrazione |
8 | Addetto Reception |
9 | Addetto Delivery |
10 | Responsabile Sicurezza |
STEP 3: Inserire i Dipendenti nella Tabella Dipendenti
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('RA001', 'Rossi', 'Alberto','Roma','1970/12/10',1,null);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ( 'VC002','Verdi', 'Carlo','Latina','1975/04/20', 2,1);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('BS003','Bianchi', 'Silvia','Rieti', '1980/02/05', 3,2);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('NM004', 'Neri', 'Mara', 'Napoli', '1978/05/10', 4,2);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('RL005','Rossi', 'Luca', 'Salerno','1972/09/15', 5, 3);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('VL006','Verdi', 'Laura', 'Roma', '1973/11/08', 5,3);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('BL007', 'Bianchi', 'Loredana', 'Latina', '1982/03/04', 6,4);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('RV008','Rossi', 'Valentina', 'Napoli', '1986/07/13', 7, 4);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('BP009', 'Bianchi', 'Paola', 'Benevento', '1975/06/25', 7,4);
insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
values ('NM010', 'Neri', 'Marcella', 'Salerno', '1979/05/28', 8,4);
Il risultato del lavoro fatto è il seguente:
select id, matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile from dipendenti;
id | matricola | cognome | nome | luogo_di_nascita | data_di_nascita | id_ruolo | id_responsabile |
1 | RA001 | Rossi | Alberto | Roma | 1970-12-10 | 1 | NULL |
2 | VC002 | Verdi | Carlo | Latina | 1975-04-20 | 2 | 1 |
3 | BS003 | Bianchi | Silvia | Rieti | 1980-02-05 | 3 | 2 |
4 | NM004 | Neri | Mara | Napoli | 1978-05-10 | 4 | 2 |
5 | RL005 | Rossi | Luca | Salerno | 1972-09-15 | 5 | 3 |
6 | VL006 | Verdi | Laura | Roma | 1973-11-08 | 5 | 3 |
7 | BL007 | Bianchi | Loredana | Latina | 1982-03-04 | 6 | 4 |
8 | RV008 | Rossi | Valentina | Napoli | 1986-07-13 | 7 | 4 |
9 | BP009 | Bianchi | Paola | Benevento | 1975-06-25 | 7 | 4 |
10 | NM010 | Neri | Marcella | Salerno | 1979-05-28 | 8 | 4 |
Creazione di una Query per visualizzare i Dipendenti, i Ruoli ed i Responsabili
Per creare la Query richiesta, serve un INNER JOIN tra la tabella Dipendenti e la tabella Ruoli, per visualizzare i ruoli e un SELF JOIN sulla tabella Dipendenti per visualizzare i Responsabili, il comando seguente vi permette di ottenere questo risultato:
select d1.id, d1.matricola, d1.cognome, d1.nome, d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome, d2.nome
from dipendenti as d1 join dipendenti as d2 on (d1.id_responsabile=d2.id) join ruoli as r on (d1.id_ruolo=r.id);
id | matricola | cognome | nome | luogo_di_nascita | data_di_nascita | ruolo | cognome | nome |
2 | VC002 | Verdi | Carlo | Latina | 1975-04-20 | Direttore Generale | Rossi | Alberto |
3 | BS003 | Bianchi | Silvia | Rieti | 1980-02-05 | Direttore Commerciale | Verdi | Carlo |
4 | NM004 | Neri | Mara | Napoli | 1978-05-10 | Responsabile Risorse Umane | Verdi | Carlo |
5 | RL005 | Rossi | Luca | Salerno | 1972-09-15 | Commerciale | Bianchi | Silvia |
6 | VL006 | Verdi | Laura | Roma | 1973-11-08 | Commerciale | Bianchi | Silvia |
7 | BL007 | Bianchi | Loredana | Latina | 1982-03-04 | Segretaria | Neri | Mara |
8 | RV008 | Rossi | Valentina | Napoli | 1986-07-13 | Addetto Amministrazione | Neri | Mara |
9 | BP009 | Bianchi | Paola | Benevento | 1975-06-25 | Addetto Amministrazione | Neri | Mara |
10 | NM010 | Neri | Marcella | Salerno | 1979-05-28 | Addetto Reception | Neri | Mara |
L'Amministratore Rossi Alberto,corrispondente all'id 1, non viene visualizzato perché l'id_responsabile è uguale a null, quindi la condizione d1.id_responsabile=d2.id non è verificata, in un INNER JOIN oppure in un SELF JOIN vengono visualizzati solo i record che soddisfano la condizione chiave esterna uguale a chiave primaria.
Per visualizzare anche l'Amministratore dell'Azienda, dovete usare un LEFT JOIN, come mostra il comando seguente:
select d1.id, d1.matricola, d1.cognome, d1.nome, d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome, d2.nome
from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r on (d1.id_ruolo=r.id);
id | matricola | cognome | nome | luogo_di_nascita | data_di_nascita | ruolo | cognome | nome |
1 | RA001 | Rossi | Alberto | Roma | 1970-12-10 | Amministratore | null | null |
2 | VC002 | Verdi | Carlo | Latina | 1975-04-20 | Direttore Generale | Rossi | Alberto |
3 | BS003 | Bianchi | Silvia | Rieti | 1980-02-05 | Direttore Commerciale | Verdi | Carlo |
4 | NM004 | Neri | Mara | Napoli | 1978-05-10 | Responsabile Risorse Umane | Verdi | Carlo |
5 | RL005 | Rossi | Luca | Salerno | 1972-09-15 | Commerciale | Bianchi | Silvia |
6 | VL006 | Verdi | Laura | Roma | 1973-11-08 | Commerciale | Bianchi | Silvia |
7 | BL007 | Bianchi | Loredana | Latina | 1982-03-04 | Segretaria | Neri | Mara |
8 | RV008 | Rossi | Valentina | Napoli | 1986-07-13 | Addetto Amministrazione | Neri | Mara |
9 | BP009 | Bianchi | Paola | Benevento | 1975-06-25 | Addetto Amministrazione | Neri | Mara |
10 | NM010 | Neri | Marcella | Salerno | 1979-05-28 | Addetto Reception | Neri | Mara |
Utilizzando gli alias di colonna ed il concatenamento tra le colonne potete rendere il report ancora più professionale, come mostra il comando seguente:
select d1.id, d1.matricola, concat(d1.cognome, ' ', d1.nome) as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, concat(d2.cognome, ' ', d2.nome) as "responsabile"
from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r on (d1.id_ruolo=r.id);
id | matricola | dipendente | luogo_di_nascita | data_di_nascita | ruolo | responsabile |
1 | RA001 | Rossi Alberto | Roma | 1970-12-10 | Amministratore | null |
2 | VC002 | Verdi Carlo | Latina | 1975-04-20 | Direttore Generale | Rossi Alberto |
3 | BS003 | Bianchi Silvia | Rieti | 1980-02-05 | Direttore Commerciale | Verdi Carlo |
4 | NM004 | Neri Mara | Napoli | 1978-05-10 | Responsabile Risorse Umane | Verdi Carlo |
5 | RL005 | Rossi Luca | Salerno | 1972-09-15 | Commerciale | Bianchi Silvia |
6 | VL006 | Verdi Laura | Roma | 1973-11-08 | Commerciale | Bianchi Silvia |
7 | BL007 | Bianchi Loredana | Latina | 1982-03-04 | Segretaria | Neri Mara |
8 | RV008 | Rossi Valentina | Napoli | 1986-07-13 | Addetto Amministrazione | Neri Mara |
9 | BP009 | Bianchi Paola | Benevento | 1975-06-25 | Addetto Amministrazione | Neri Mara |
10 | NM010 | Neri Marcella | Salerno | 1979-05-28 | Addetto Reception | Neri Mara |
Attenzione la funzione MySQL concat permette di concatenare in un'unica colonna il congnome, uno spazio ed il nome. Con altri DBMS gli operatori di concatnamento sono || (doppio pipe) oppure il segno +, come mostra l'esempio seguente:
select d1.id, d1.matricola, d1.cognome || ' ' || d1.nome as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome || ' ' || d2.nome as "responsabile"
from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r on (d1.id_ruolo=r.id);
Infine, per rendere il report ancora più professionale, con un ulteriore JOIN sulla tabella ruoli, potete anche aggiungere anche il ruolo del Responsabile, come mostra il comando seguente:
select d1.id, d1.matricola, concat(d1.cognome, ' ', d1.nome) as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r1.ruolo,
concat(d2.cognome, ' ', d2.nome) as "responsabile", r2.ruolo as "ruolo responsabile"
from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r1 on (d1.id_ruolo=r1.id)
left join ruoli as r2 on (d2.id_ruolo=r2.id) ;
id | matricola | dipendente | luogo_di_nascita | data_di_nascita | ruolo | responsabile | ruolo responsabile |
1 | RA001 | Rossi Alberto | Roma | 1970-12-10 | Amministratore | null | null |
2 | VC002 | Verdi Carlo | Latina | 1975-04-20 | Direttore Generale | Rossi Alberto | Amministratore |
3 | BS003 | Bianchi Silvia | Rieti | 1980-02-05 | Direttore Commerciale | Verdi Carlo | Direttore Generale |
4 | NM004 | Neri Mara | Napoli | 1978-05-10 | Responsabile Risorse Umane | Verdi Carlo | Direttore Generale |
5 | RL005 | Rossi Luca | Salerno | 1972-09-15 | Commerciale | Bianchi Silvia | Direttore Commerciale |
6 | VL006 | Verdi Laura | Roma | 1973-11-08 | Commerciale | Bianchi Silvia | Direttore Commerciale |
7 | BL007 | Bianchi Loredana | Latina | 1982-03-04 | Segretaria | Neri Mara | Responsabile Risorse Umane |
8 | RV008 | Rossi Valentina | Napoli | 1986-07-13 | Addetto Amministrazione | Neri Mara | Responsabile Risorse Umane |
9 | BP009 | Bianchi Paola | Benevento | 1975-06-25 | Addetto Amministrazione | Neri Mara | Responsabile Risorse Umane |
10 | NM010 | Neri Marcella | Salerno | 1979-05-28 | Addetto Reception | Neri Mara | Responsabile Risorse Umane |
Attenzione per visualizzare anche l'Amministratore è importante che anche l'ultimo JOIN sia di tipo LEFT .
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I
App Mania Lezione 9 - Gestione Sprite - II Parte - (Come far girare l'ago di una bussola)
Gino Visciano |
Skill Factory - 23/04/2016 08:26:00 | in Tutorials
Benvenuti alla nona lezione, nella lezione precedente avete preparato le immagini che servono per far girare l'ago della bussola sia in senso orario, che in senso antiorario.
In questa lezione implementerete i blocchi che servono per attivare l'animazione per far girare l'ago.
Come avete già visto nella lezione precedente, per far girare l'ago ogni volta che premete sui pulsanti "Ruota+" e "Ruota-", dovete sostituire nello Sprite Ago_Bussola l'immagine dell'ago corrente con l'immagine successiva, se avete premuto il pulsante "Ruota+" oppure l'immagine precedente se avete premuto il pulsante "Ruota-", come mostra la sequenza seguente:
I nomi delle immagini, sono composti da una parte fissa, la parola ago e da un numero progressivo da 01 .. 12, sfrutterete proprio quest'ultima caratteristica per caricare l'immagine che serve, basta creare un contatore che s'incrementa oppure si decrementa ad ogni operazione.
Con App Inventor per creare un contatore serve una variabile, per inizializzarla eseguite le operazioni seguenti:
1) selezionate l'Area Blocks;
2) aprite la categoria Variables;
3) cliccate sul blocco initialize global;
4) rinominatelo fotogramma;
5) aprite la categoria Math;
6) cliccate sul blocco numero;
7) associate il blocco numero a quello initialize global;
8) assegante al blocco numero il valore 1 per inizializzare la variabile fotogramma, come mostra l'immagine.
Userete la variabile fotogramma, come contatore per richiamare le immagini. Il contatore si dovrà incrementare ogni volta che si clicca sul pulsante "Ruota+" e decrementare quando si clicca sul pulsante "Ruota-", l'immagine seguente mostra come trasformare la variabile fotogramma in un contatore:
ogni volta che viene eseguito questo blocco la variabile fotogramma s'incrementa di 1.
Il blocco somma lo trovate nella categoria Math.
Il blocco get oppure il blocco set, per ottenere oppure assegnare un valore alla variabie fotogramma, lo trovate spostando il cursore del mouse sul blocco initialize global, come mostra l'immagine seguente:
Per caricare l'immagine nello Sprite Ago_Bussola, serve il blocco set Picture, lo trovate nella categoria Ago_Bussola, come mostra l'immagine seguente:
Per comporre il nome dell'immagine, dovete procedere come segue:
1) per i valori da 1 a 9 del contatore, dovete concatenare la parola "ago0" con il valore della variabile "fotogramma" e l'estensione ".png";
2) per i valori da 10 a 12 del contatore, dovete concatenare la parola "ago", senza 0 (zero), con il valore della variabile "fotogramma" e l'estensione ".png".
Per concatenare i due valori tra loro dovete utilizzare il blocco Join, della categoria Text. Nella stessa categoria trovate anche il blocco text string, che permette di aggiungere valori alfanumerici.
Le immagini seguenti mostrano i blocchi da utilizzare per comporre il nome dell'immagine corrente da caricare nello Sprite.
1) Blocchi da usare per i Fotogrammi da 1 a 9:
2) Blocchi da usare per i Fotogrammi da 10 a 12:
Utilizzando un blocco if potete controllare il valore raggiunto dal contatore e decidere quali blocchi usare, come mostra l'immagine seguente:
Il blocco if si comporta nel modo seguente: se fotogramma (il contatore) è minore di 10, componi il nome con la formula "ago0"+fotogramma+".png", altrimenti usa la formula "ago"+fotogramma+".png", perché i per i valori di fotogramma da 10 in poi non serve più lo 0 (zero).
Come avete visto nelle lezioni precedenti il blocco if lo trovate nella categoria Control.
A questo punto per creare l'animazione dell'ago che gira dovete creare le strutture di blocchi seguenti.
1) Struttura che permette di creare l'animazione per far girare l'ago della bussola in senso orario:
Il blocco Click del pulsante But_ruota_piu lo trovate nella sezione Blocks, cliccando sul nome del pulsante.
2) Struttura che permette di creare l'animazione per far girare l'ago della bussola in senso antiorario:
Il blocco Click del pulsante But_ruota_meno lo trovate nella sezione Blocks, cliccando sul nome del pulsante.
Per inizializzare lo schermo la prima volta che lanciate l'applicazione, con il primo ago, dovete usare il blocco seguente:
Il blocco Initialize lo trovate nella sezione Blocks, cliccando sul nome dello schermo Screen1.
L'immagine seguente mostra la parte logica completa dell'APP Bussola:
Per eseguire l'APP Bussola, avviate l'emulatore aiStarter:
e avviate l'APP selezionando Connect e cliccando sul comando Emulator.
Se avete l'emulatore sul cellulare, per avviare l'APP dovete procedere come segue:
1) lanciare l'emulatore sul cellulare
2) selezionare Connect sul computer e cliccare sul comando AI Companion
3) Inserire oppure leggere con il QR code il codice visualizzato sul computer.
L'immagine seguente mostra l'APP in esecizione:
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I