Ciao ragazzi,
mi sto dilettando nello studio del PHP e ammetto di avere un serio problema con la funziona JOIN quando si tratta di 3 tabelle.
Allo stato attuale:
gruppo
id_gruppo || nome_gruppo
1 -------------------- Gruppo 1
2 --------------------Gruppo 2
3 --------------------Gruppo 3
carica
id_carica || id_gruppo || nome_carica
1 ---------------------1 -----------Ruolo_gruppo1_1
2 ---------------------1 ----------Ruolo_gruppo1_2
3 --------------------2 ----------Ruolo_gruppo2_1
4 --------------------3 ----------Ruolo_gruppo3_1
5 --------------------3 ----------Ruolo_gruppo3_2
6 -------------------- 3 ----------Ruolo_gruppo3_3
membri
nome_membro || id_carica
Tizio -------------------------- 4
Caio -------------------------- 6
Sempronio ----------------1
Il mio problema sorge quando provo a creare una pagina con una tabella, divisa su due colonne, a sinistra il nome dei membri appartenenti allo stesso gruppo (ordinati per id_carica) e a destra un select con tutte le cariche di quel gruppo (ovviamente dentro un ciclo while).
So fare un JOIN a 2, ma non a 3:
SELEZIONO SOLO LE CARICHE STESSO GRUPPO:
Codice PHP:
$cariche = "SELECT carica.*, gruppo.*
FROM carica JOIN gruppo ON carica.id_gruppo = gruppo.id_gruppo
WHERE carica.id_gruppo IN
(SELECT carica.id_gruppo
FROM membri JOIN carica ON membri.id_carica = carica.id_carica
WHERE membri.nome_membro= $login AND carica.id_gruppo>0)";
SELEZIONO SOLO LE PERSONE STESSO GRUPPO:
Codice PHP:
$membri = "SELECT membri.*, carica.*
FROM membri JOIN carica ON membri.id_carica=carica.id_carica
WHERE carica.id_gruppo IN
(SELECT carica.id_gruppo
FROM membri JOIN carica ON membri.id_carica = carica.id_carica
WHERE membri.nome_membro= $login AND carica.id_gruppo>0)";
A questo punto nasce l'inghippo.
Riesco a far comparire a sinistra i membri, ma nella colonna di destra, quando devo avviare il comando select con all'interno solo le cariche relative a quel gruppo, mi perdo.
ESEMPIO (GRUPPO 3)
Tizio | Ruolo_gruppo3_1, Ruolo_gruppo3_2, Ruolo_gruppo3_3
Caio | Ruolo_gruppo3_1, Ruolo_gruppo3_2, Ruolo_gruppo3_3
Posto quello che sono riuscito a fare:
Codice PHP:
<?php
//richiamo i membri
$membri = "SELECT membri.*, carica.*
FROM membri JOIN carica ON membri.id_carica=carica.id_carica
WHERE carica.id_gruppo IN
(SELECT carica.id_gruppo
FROM membri JOIN carica ON membri.id_carica = carica.id_carica
WHERE membri.nome_membro= $login AND carica.id_gruppo>0)";
$risultato_membri = ok_query($membri, 'result');
while($row = ok_query($risultato_membri, 'fetch')) {
?>
<tr>
<td>
<u><?php echo $row['nome_membro']; ?></u>
</td>
<td>
<select>
<option>???????? cariche del gruppo</option>
</select>
</td>
</tr>
<?php }//fine while ?>
?>