Ho due tabelle simili, una per gli insegnanti ed i loro corsi ed una per gli allievi ed i corsi a cui sono iscritti.
I campi sono:
id, corso, id_insegnanti
id, corso, id_allievo
I record delle tabelle:
id |
corso |
id_allievo |
1 |
CHITARRA ELETTRICA |
1 |
2 |
CONTRABBASSO |
1 |
3 |
CHITARRA ELETTRICA |
2 |
4 |
CONTRABBASSO |
2 |
5 |
CHITARRA ELETTRICA |
3 |
6 |
CONTRABBASSO |
3 |
7 |
TROMBA |
4 |
8 |
VIOLINO |
4 |
9 |
CHITARRA CLASSICA |
5 |
10 |
TROMBA |
5 |
29 |
BATTERIA |
6 |
12 |
TROMBA |
6 |
27 |
SASSOFONO |
14 |
26 |
TROMBA |
13 |
25 |
SASSOFONO |
13 |
24 |
VIOLINO |
12 |
23 |
SASSOFONO |
12 |
19 |
SASSOFONO |
10 |
20 |
TROMBA |
10 |
21 |
SASSOFONO |
11 |
22 |
VIOLINO |
11 |
28 |
TROMBA |
14 |
|
|
sc_corsi_docenti |
id |
corso |
id_insegnanti |
1 |
CHITARRA ELETTRICA |
1 |
2 |
CONTRABBASSO |
1 |
3 |
CHITARRA CLASSICA |
2 |
4 |
TROMBA |
2 |
5 |
SASSOFONO |
3 |
6 |
VIOLINO |
3 |
7 |
TROMBA |
1 |
8 |
BATTERIA |
4 |
9 |
EDUCAZIONE MUSICALE |
4 |
|
Facendo i riepiloghi dei corsi per ciascuna tabella ottengo i giusti riepiloghi:
I corsi assegnati allo staff |
Corsi |
N. ass |
BATTERIA |
1 |
CHITARRA CLASSICA |
1 |
CHITARRA ELETTRICA |
1 |
CONTRABBASSO |
1 |
EDUCAZIONE MUSICALE |
1 |
SASSOFONO |
1 |
TROMBA |
2 |
VIOLINO |
1 |
I corsi assegnati agli allievi |
Corsi |
N. ass |
BATTERIA |
1 |
CHITARRA CLASSICA |
1 |
CHITARRA ELETTRICA |
3 |
CONTRABBASSO |
3 |
SASSOFONO |
5 |
TROMBA |
6 |
VIOLINO |
3 |
Ora quel che desidero ottenere è una cosa del genere:
corsi |
staff assegnati |
allievi assegnati |
BATTERIA |
1 |
1 |
CHITARRA CLASSICA |
1 |
1 |
CHITARRA ELETTRICA |
1 |
3 |
CONTRABBASSO |
1 |
3 |
EDUCAZIONE MUSICALE |
1 |
|
SASSOFONO |
1 |
5 |
TROMBA |
2 |
6 |
VIOLINO |
1 |
3 |
Ho provato con una UNION, con una INNER JOIN che restituiscono risultati non soddisfacienti o inesatti e con altri metodi che mi restituiscono degli errori.
UNION
Codice PHP:
$Query_corsi_full = "
SELECT corso, count( id_insegnanti ) AS tot, 'ins' AS tipo
FROM sc_corsi_docenti
GROUP BY corso
UNION
SELECT corso, count( id_allievo ) AS tot, 'all' AS tipo
FROM sc_corsi_allievi
GROUP BY corso
ORDER BY tipo, tot
";
JOIN
Codice PHP:
$Query_corsi_full ="
SELECT sc_corsi_docenti.corso AS corsoA, count( sc_corsi_docenti.id_insegnanti ) AS totA, 'ins' AS tipoA,
sc_corsi_allievi.corso AS corsoB, count( sc_corsi_allievi.id_allievo ) AS totB, 'all' AS tipoB
FROM sc_corsi_docenti
INNER JOIN sc_corsi_allievi
ON sc_corsi_docenti.id = sc_corsi_allievi.id
GROUP BY sc_corsi_docenti.corso, sc_corsi_allievi.corso
";
Con la UNION ottengo risultati giusti, ma, giustamente, coi dati intabellati in modo verticale.
Con la JOIN ottengo i dati intabellati in maniera orizzontale, ma con risultati errati:
Ora chiedo se c'è un modo per ottenere i dati disposti come nell'esempio mostrato più sopra.
Grazie per l'attenzione.