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.