Skillbook Logo
foto profilo

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


Share Button

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


Share Button

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


Share Button

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


Share Button

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

Share Button
TOP