-
Interazione tra tabelle
Ciao a tutti. Ho un problemino (strano eh?) con php e database.
In una pagina php ho una tabella che tratta di backup di progetti, la tabella funge da interfaccia semi-grafica di un database.
In sostanza tutti i dati del db "Backup" sono trasferiti in lettura su questa tabella per rendere la comprensione dei dati più agevole.
L'intestazione di tabella è :
IdBackup NomeCommessa IdCliente IdTipoCommessa IdTipoBackup Data Numero Keywords
IdCliente ad esempio richiama un numero nella tabella "Backup", il nome del cliente che però corrisponde a quell' id è nella tabella "Cliente".
Come faccio dunque con questo e tutti gli altri Id a tradurre da id a nome? da numero a stringa corretta?
Come posso eseguire questo scambio di informazioni tra database?
Scommetto che la soluzione è una cavolata :)
Grazie a tutti!
-
Se ho capito bene il problema basterebbe utilizzare l'operazione JOIN dell'SQL :wink:
-
Ho cercato in rete ma non riesco ad applicarlo...
Nella mia pag ho la selezione dati:
Codice PHP:
$query = "SELECT IdBackup,NomeCommessa,IdCliente,IdTipoCommessa,IdTipoBackup,Data,Numero,Keywords FROM Backup";
poi l'invio della query..
poi ho il ciclo che prende i dati
Codice PHP:
while ($row = mysql_fetch_assoc($result)) {
$IdBackup = htmlentities($row['IdBackup']);
$NomeCommessa = htmlentities($row['NomeCommessa']);
$IdCliente = htmlentities($row['IdCliente']);
$IdTipoCommessa = htmlentities($row['IdTipoCommessa']);
$IdTipoBackup = htmlentities($row['IdTipoBackup']);
$Data = htmlentities($row['Data']);
$Numero = htmlentities($row['Numero']);
$Keywords = htmlentities($row['Keywords']);
e la tabella con l'echo dei valori:
Codice PHP:
echo "<tr>
<td>$IdBackup</td>
<td>$NomeCommessa</td>
<td>$IdCliente</td>
<td>$IdTipoCommessa</td>
<td>$IdTipoBackup</td>
<td>$Data</td>
<td>$Numero</td>
<td>$Keywords</td>
</tr>";
}
Seguendo il tuo consiglio ho costruito a parte la formula:
Codice PHP:
$join_cliente = mysql_query("SELECT NomeCliente FROM Cliente JOIN Backup USING (IdCliente)");
while ($row = mysql_fetch_assoc($join_cliente)) {
echo $row['NomeCliente']." ";
}
che sputa fuori dei nomi (corretti - cioè i nomi della tabella Cliente che corrispondono all'elenco ordinato di IdCliente nella tabella Backup) ma cmq non riesco a mescolare questa formula con la mia pagina...
I nomi dei Clienti devono comparire in corispondenza dei loro Id...
Questa è la tabella finale dove a quanto pare devo fare una marea di Join!
http://ilcantodeilupi.altervista.org/tabella.jpg
..se non chiedo troppo posso domandare un'esempio pratico??
-
naturalmente per unire 2 tabelle con un JOIN le 2 tabelle devono avere un attributo in comune dove attuare il JOIN (gli attributi nelle 2 tabelle possono avere comunque nomi differenti.. basta che a valore uguale corrisponde "entità" uguali)
quindi avendo le 2 seguenti tabelle :
"Clienti" con i campi "nomeCliente" e "id"
"Backup" con i campi "idBackup" , "nomeCommessa" , "idCliente" , "idTipoCommessa" , "idTipoBackup" , "data" , "numero" , "keywords"
con il campo "id" di "Clienti" uguale al campo "idCliente" di "Backup" se si riferiscono allo stesso cliente..
se fai
Codice PHP:
SELECT *
FROM Clienti JOIN Backup ON Clienti.id = Backup.idCliente
ti viene fuori una tabella con TUTTI i campi delle 2 tabelle di partenza e con le righe formate dalle righe della prima unite alle righe della seconda che hanno il campo "idCliente" uguale al campo "id" della prima (non sono molto bravo a spiegare mi sa :roll:)
insomma una tabella con i seguenti campi:
nomeCliente | id | idBackup | nomeCommessa | idCliente | idTipoCommessa | idTipoBackup | data | numero | keywords
dove il campo "id" e il campo "idCliente" sono uguali....
poi per avere la tabella finale che hai postato o agisci sul php prendendo solo i campi che ti servono, oppure sulla query SQL modificando il SELECT
Codice PHP:
SELECT idBackup,nomeCommessa,nomeCliente,idTipoCommessa,idTipoBackup,data,numero,keywords
FROM Clienti JOIN Backup ON Clienti.id = Backup.idCliente
sembra complesso, ma credo che se fai un paio di prove la cosa diventa molto più banale di quello che può sembrare dalla mia (confusa) spiegazione :lol:
PS. Giusto per info...
dopo il JOIN puoi mettere la clausola WHERE che attua una selezione sulla tabella ottenuta dal JOIN.... per esempio mettendo "WHERE nomeCliente='Rossi' ottieni una tabella come quella precedente, ma con solo i backup del cliente Rossi
-
grazie mille!!!
ho capito :) :)