Join 3 tabelle

  • Creatore Discussione Creatore Discussione miagy
  • Data di inizio Data di inizio

miagy

Utente Attivo
2 Nov 2014
83
1
8
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_gruppo
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:

PHP:
$cariche = "SELECT carica_gruppo.*, gruppo.* 
FROM carica_gruppo JOIN gruppo ON carica_gruppo.id_gruppo = gruppo.id_gruppo
WHERE carica_gruppo.id_gruppo IN
(SELECT carica_gruppo.id_gruppo 
FROM membri JOIN carica_gruppo ON membri.id_carica = carica_gruppo.id_carica 
WHERE membri.nome_membro= $login AND carica_gruppo.id_gruppo>0)";

SELEZIONO SOLO LE PERSONE STESSO GRUPPO:

PHP:
$membri = "SELECT membri.*, carica_gruppo.* 
FROM membri JOIN carica_gruppo ON membri.id_carica=carica_gruppo.id_carica 
WHERE  carica_gruppo.id_gruppo IN 
(SELECT carica_gruppo.id_gruppo 
FROM membri JOIN carica_gruppo ON membri.id_carica = carica_gruppo.id_carica 
WHERE membri.nome_membro= $login AND carica_gruppo.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.
Posto quello che sono riuscito a fare:

PHP:
<?php
//richiamo i membri
$membri = "SELECT membri.*, carica_gruppo.* 
FROM membri JOIN carica_gruppo ON membri.id_carica=carica_gruppo.id_carica 
WHERE  carica_gruppo.id_gruppo IN
(SELECT carica_gruppo.id_gruppo 
FROM membri JOIN carica_gruppo ON membri.id_carica = carica_gruppo.id_carica 
WHERE membri.nome_membro= $login AND carica_gruppo.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 ?>
?>
 
Ultima modifica:

Discussioni simili