[PHP] Aiuto su inner join

  • Creatore Discussione Creatore Discussione migo80
  • Data di inizio Data di inizio

migo80

Utente Attivo
25 Apr 2013
243
3
18
Un saluto a tutti, sono nuovamente qui per chiedere l'ennesimo aiuto.
Avrei bisogno di qualcuno che mi faccia vedere come si le inner join tra 12 tabelle per poi selezionare i loro record.
 
Avrei bisogno di qualcuno che mi faccia vedere come si le inner join tra 12 tabelle per poi selezionare i loro record.
Come hai messo i dati nelle 12 tabelle?
Codice:
SELECT Tabella1.* , Tabella2.*,Tabella3.*
FROM Tabella1
INNER JOIN Tabella2
    ON Tabella2.ref_id = Tabella1.id
 INNER JOIN Tabella3
    ON Tabella3.ref_id = Tabella1.id
INNER JOIN Tabella4
    ON Tabella4.ref_id = Tabella1.id
Senza sapere nulla ho ipotizzato che le 11 tabelle siano referenziate con la prima attraverso ref_id.
 
costruisci la query facendo la join sulle colonne comuni delle tabelle
quando l'hai ben provata e sei sicuro del risultato,
ti suggerisco di creare una "view" nel db in modo da gestire l'insieme come un'unica tabella (penso che mysql supporti le view...)
puoi vedere degli esempi nel link
https://www.w3schools.com/sql/sql_view.asp

se poi vuoi avere una visione delle possibili join, nel link trovi la rappresentazione grafica
https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg
 
Ultima modifica:
Un grazie per l'aiuto....mi correggo sul numero delle tabelle che non sono 12 ma 8 :D
posto la select che ho scritto ma ancora non l'ho provata, sarà giusta?

PHP:
$id_cliente = $_SESSION['id_cliente'];
    
    $result = $mysqli->query("SELECT * FROM anagrafica AS a
    LEFT JOIN stato_salute AS ss ON ss.cliente_id = a.$id_cliente
    LEFT JOIN abitudini_alimentari AS aa ON aa.cliente_id = a.$id_cliente
    LEFT JOIN attivita_fisica AS af ON af.cliente_id = a.$id_cliente
    LEFT JOIN piani_alimentari_assegnati AS pa ON pa.cliente_id = a.$id_cliente
    LEFT JOIN stile_vita_dieta AS sv ON sv.cliente_id = a.$id_cliente
    LEFT JOIN integratori_assegnati AS ia ON ia.cliente_id = a.$id_cliente
    LEFT JOIN carrello_spesa AS cs ON cs.cliente_id = a.$id_cliente
    ");
    $mysqli->set_charset("utf8");

     while($row = $result->fetch_assoc()){
        echo $row."<br>";         
     }

Riguardo le view non ne ero a conoscenza, darò uno sguardo ai due link e ti farò sapere se riuscirò nell'impresa...
 
Corretta come l'esempio suggerito da Macus_adi funzionaaaaaa..

PHP:
$id_cliente = $_SESSION['id_cliente'];
   
    $result = $mysqli->query("SELECT anagrafica.*,stato_salute.*, abitudini_alimentari.*, attivita_fisica.*, piani_alimentari_assegnati.*,
    stile_vita_dieta.*, integratori_assegnati.*, carrello_spesa.*  FROM anagrafica 
    INNER JOIN stato_salute 
    ON stato_salute.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN abitudini_alimentari 
    ON abitudini_alimentari.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN attivita_fisica
    ON attivita_fisica.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN piani_alimentari_assegnati 
    ON piani_alimentari_assegnati.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN stile_vita_dieta 
    ON stile_vita_dieta.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN integratori_assegnati 
    ON integratori_assegnati.cliente_id = anagrafica.id_cliente=$id_cliente
    INNER JOIN carrello_spesa 
    ON carrello_spesa.cliente_id = anagrafica.id_cliente=$id_cliente
    ");
    $mysqli->set_charset("utf8");

    while($row = $result->fetch_assoc()){
        echo $row['cliente_id']."<br>";         
    }

ma c'è un modo per evitare di scrivere negli echo i nomi dei campi dato che ne ho tanti?
 
Fai un mapping dei dati all'interno di un array per effettuare l'iterazione in automatico.
In array_mappa_dati inserisci i campi che vuoi che vengano stampati....
PHP:
$array_mappa_dati=['cliente_id','nome_cliente','etc.......'];
while($row = $result->fetch_assoc()){
    foreach($array_mappa_data as $dato){
      echo $row[$dato]."<br>";        
    }
}

Invece se devi stampare tutti i dati fai cosi
PHP:
while($row = $result->fetch_assoc()){
    foreach($row as $k=>$dato){
      echo $dato."<br>";       
    }
}
 
purtroppo non va bene per me, perchè tutti i dti li devo impaginare penso in una tabella
 
se li devi inserire in una tabella:

PHP:
$table='<table>';
while($row = $result->fetch_assoc()){
$table.='<tr>'; 
foreach($row as $k=>$dato){
    $table.='<td>'.$dato.'</td>';
    }
$table.='</tr>'; 
}
$table.='</table>';
echo $table;
 
Andava tutto bene peccato solo che sono molti dati da mostrare e graficamente è un casino anche perchè ovviamente estrae tutti gli id numerici delle tabelle.
torno al metodo manuale ossia mi valorizzo le variabili una ad una e poi le impagino in più tabelle separate.
 

Discussioni simili