Problema query con join visualizzazione record ripetuti

andrea.peo

Nuovo Utente
20 Lug 2013
11
0
0
Un saluto a tutti
mi sono piantato in un problema probabilmente facile, ma non riesco ad uscirne.
Vi espongo il problema:
Mi trovo con due tabelle:
Tabella tecnico, con id/nome/matricola,
Tabella interventi, con id_int/commessa/tecnico1/tecnico2/tecnico3
Allego immagine:

Tabelle.png

ho messo in relazione tecnico.id con interventi.id_int, e fino a qui tutto bene.
Il problema e che vorrei visualizzare i seguenti dati:
commessa/nome tecnico1/nome tecnico2/nome tecnico3, e qui inizia l'agonia, non so propio come fare,
provo allegarvi il codice, nella speranza che qualche d'uno possa aiutarmi. :crying:

PHP:
$result = mysql_query("SELECT * FROM interventi
INNER JOIN tecnico ON interventi.tecnico1 = tecnico.id OR interventi.tecnico2 = tecnico.id OR interventi.tecnico3 = tecnico.id
ORDER BY commessa ASC")
or die(mysql_error());
echo"<table>
<tr>
<th>Commessa</th>
<th>Tecnico1</th>
<th>Tecnico2</th>
<th>Tecnico3</th>
</tr>"; 
while($row = mysql_fetch_array( $result )) { 
echo"<tr><th>$row['commessa']</th>";
echo"<th>$row['tecnico1']</th>"; //Vorrei visualizzare nome e non il numero id
echo"<th>$row['tecnico2']</th>"; //Vorrei visualizzare nome e non il numero id
echo"<th>$row['tecnico3']</th>"; //Vorrei visualizzare nome e non il numero id
echo"</tr></table>";
}
Grazie in anticipo a qualunque anima pia :byebye:
 
ciao
ti sposto in php che mi sembra più adeguato, poi
cosi di getto mi è venuto questo script, provalo non so se funzia
PHP:
<?php
//....
echo"<table>
<tr>
<th>Commessa</th>
<th>Tecnico1</th>
<th>Tecnico2</th>
<th>Tecnico3</th>
</tr>";
while($row = mysql_fetch_array( $result )) {
	foreach($row as $campo => $valore)
		if($campo == "tecnico1" || $campo == "tecnico2" || $campo == "tecnico3"){
			$q=mysql_query("SELECT nome FROM tecnico WHERE id=$valore");
			$n=mysql_fetch_array($q);
			$nome[]=$n['nome'];
		}
	)
	echo"<tr><td>{$row['commessa']}</td>";
	echo"<td>{$nome[0]}</td>"; //Vorrei visualizzare nome e non il numero id
	echo"<td>{$nome[1]}</td>"; //Vorrei visualizzare nome e non il numero id
	echo"<td>{$nome[2]}</td>"; //Vorrei visualizzare nome e non il numero id
	echo"</tr>";// </table> da portare fuori del while
}  
echo"</table>";
//....
?>

poi comunque abbandona le vecchie istruzioni mysql deprecate e passa a mysqli o alla classe pdo
 
Ti ringrazio per la rapidissima risposta,
ho provato il codice, il valore commessa ok! ma i valori nome restano vuoti,
o trovato una parentesi di troppo, che ho eliminato altrimenti non funziona.
PHP:
}
    )
    echo"<tr><td>{$row['commessa']}</td>";
lo sostituito con:
PHP:
 }
    echo"<tr><td>{$row['commessa']}</td>";
 
ciao
questo l'ho provato con i dati che hai postato delle tue tabelle e sembrerebbe funzionare
PHP:
<?php
//***dati di connessione***
/*
$result = mysql_query("SELECT * FROM interventi
INNER JOIN tecnico ON interventi.tecnico1 = tecnico.id OR interventi.tecnico2 = tecnico.id OR interventi.tecnico3 = tecnico.id
ORDER BY commessa ASC")
or die(mysql_error());
*/
$result = mysql_query("SELECT * FROM interventi ORDER BY commessa ASC");
//....
echo "<pre>";
echo"<table>
<tr>
<th>Commessa</th>
<th>Tecnico1</th>
<th>Tecnico2</th>
<th>Tecnico3</th>
</tr>";
$conta=0;
while($row = mysql_fetch_assoc( $result )){
	foreach($row as $campo => $valore){
		if($campo == "tecnico1" || $campo == "tecnico2" || $campo == "tecnico3"){
			$q=mysql_query("SELECT nome FROM tecnico WHERE id=$valore");
            $n=mysql_fetch_array($q);
			$nome[]=$n['nome'];
        }//non era in più
    }
    echo"<tr><td>{$row['commessa']}</td>";
    echo"<td>{$nome[$conta]}</td>"; //Vorrei visualizzare nome e non il numero id
    echo"<td>{$nome[$conta+1]}</td>"; //Vorrei visualizzare nome e non il numero id
    echo"<td>{$nome[$conta+2]}</td>"; //Vorrei visualizzare nome e non il numero id
    echo"</tr>";// </table> da portare fuori del while
$conta+=3;
}  
echo"</table>";
//.... 
?>

per comodità ho usato le mysql
 
Tutto ok! :mavieni:
Ho provato e funziona a meraviglia.
Ti ringrazio tantissimo.
By By :byebye:
 

Discussioni simili