Relazionare 2 tabelle

leon-kennedy

Utente Attivo
19 Mag 2010
147
0
0
Ciao a tutti...scusate torno a rompervi le scatole,ma vorrei il vostro aiuto!0:)
Devo mettere in relazione 2 tabelle...potete aiutarmi o spiegarmi con un esempio pratico?

PHP:
<?php 
//giocatori 
$team = $_SESSION['username']; 
$query = "SELECT * FROM GIOC_giovani WHERE squadra = '$team' ORDER BY numero ASC"; 
$result = mysql_query($query) or die (mysql_error()); 
while($row = mysql_fetch_array($result)){ 
$costo = number_format($row['costo'], "0", "", ".");  

echo <<<END 
<table> 
        <tr> 
        <td width="30px"><a href="modifica_num.php?id_gioc={$row['id']}">{$row['numero']}</a></td> 
        <td width="125px">{$row['nome']}</td> 
        <td width="125px">{$row['cognome']}</td> 
        <td width="50px">{$row['ruolo']}</td> 
        <td width="50px">{$row['età']}</td> 
        <td width="130px">$costo €</td> 
        <td width="90px">Salute: {$row['forma_fisica']}</td> 
        <td width="90px">Morale: {$row['morale']}</td> 
        </tr> 
</table> 
END; 
} 
//portieri 
$query = "SELECT * FROM GIOC_giovani_port WHERE squadra = '$team' ORDER BY numero ASC"; 
$result = mysql_query($query) or die (mysql_error()); 
while($row = mysql_fetch_array($result)){ 
$costo = number_format($row['costo'], "0", "", ".");  
echo <<<END 
<table> 
        <tr> 
        <td width="30px"><a href="modifica_num_port.php?id_gioc={$row['id']}">{$row['numero']}</a></td> 
        <td width="125px">{$row['nome']}</td> 
        <td width="125px">{$row['cognome']}</td> 
        <td width="50px">{$row['ruolo']}</td> 
        <td width="50px">{$row['età']}</td> 
        <td width="130px">$costo €</td> 
        <td width="90px">Salute: {$row['forma_fisica']}</td> 
        <td width="90px">Morale: {$row['morale']}</td> 
        </tr> 
</table> 
END; 
} 
?>

Vorrei che i risultati di "SQUADRA_giovani" e "SQUADRA_giovani_port" venissero messi in ordine crescente in base al numero...
 
ciao
cosa intendi per mettere in relazione? se voi invece ordinare i dati in modo discendente (dal più grande al più piccolo) devi usare DESC, al contrario ASC (che è il modo di default di ORDER BY).
mettere in relazione due tabelle (almeno secondo me) vuol dire operare su due tabelle una in funzione di alcuni valori dell'altra (es nelle join).
ma forse ho capito male cosa intendi.
anche se (forse) mi sembra di capire cosa ti capita. esempio hai i giocatori
1 portiere
2 terzino dx
3 terzino sx
ecc..
10 attaccante dx
11 attaccante sx

se i "numeri" non sono numeri ma stringhe (varchar in tabella?) è facile che l'ordine DESC diventi

1 portiere
10 attaccante dx
11 attaccante sx
2 terzino dx
3 terzino sx
ecc...

se ti capita così è perche la stringa "11" viene alfabeticamente prima della stringa "2"
se è questo e vuoi l'ordine esatto forse ti conviene trattare i numeri come interi (int(2) in tabella) e allora l'ordine viene giusto
 
Ciao io ho la tabella GIOC_giovani (dove ci sono tutti i ruoli tranne il portiere) e quella GIOC_giovani_port(dove ci sono i portieri)...

Come vedi io estraggo i dati dalle due tabelle e ripeto per due volte "ORDER BY numero BY ASC" e mi viene un risultato così:

il campo "numero" è INT (2) da 1 a 99

E quindi vengono ordinati distintamente,io vince vorrei ottenere un ordine generico così:

1 PT
2 PT
4 DF
5 CC
7 ES
10 AT
12 PT

C'è un modo? :)
 
Ultima modifica:
ciao
prova in questo modo (ma non so se funzi, non sono molto esperto nelle join)
PHP:
<?php
//.....
$query = "SELECT * FROM GIOC_giovani AS giov,GIOC_giovani_port AS port  WHERE giov.squadra = '$team' AND port.squadra = '$team' ORDER BY numero ASC";
$result = mysql_query($query) or die (mysql_error()); 
echo "<table>";
while($row=mysql_fetch_array($result)){
$costo = number_format($row['costo'], "0", "", ".");   
echo <<<END   
        <tr>  
        <td width="30px"><a href="modifica_num.php?id_gioc={$row['id']}">{$row['numero']}</a></td>  
        <td width="125px">{$row['nome']}</td>  
        <td width="125px">{$row['cognome']}</td>  
        <td width="50px">{$row['ruolo']}</td>  
        <td width="50px">{$row['età']}</td>  
        <td width="130px">$costo €</td>  
        <td width="90px">Salute: {$row['forma_fisica']}</td>  
        <td width="90px">Morale: {$row['morale']}</td>  
        </tr>
END;  
}
echo "</table>";
//....
?>
se non funzia non mandarmi....prima o poi una soluzione salta fuori
posta gli eventuali messaggi di errore, poi metti eventuali var_dump e dimmi cosa risulta

p.s.
sia che funzi o no porta il tag <table></table> fuori dal ciclo while, perche vuoi fare 100 tabelle? quando ti bastano le righe/colonne?

p.s. al ps
mi è venuto un dubbio al bosto di AND poi prova OR
 
PHP:
<?php
$team = $_SESSION['username'];  
$query = "SELECT * FROM GIOC_giovani AS giov,GIOC_giovani_port AS port  WHERE giov.squadra = '$team' AND port.squadra = '$team' ORDER BY numero ASC";  
$result = mysql_query($query) or die (mysql_error());  
echo "<table>";
while($row = mysql_fetch_array($result)){  
$costo = number_format($row['costo'], "0", "", ".");   

echo <<<END
	<tr>   
        <td width="30px"><a href="modifica_num.php?id_gioc={$row['id']}">{$row['numero']}</a></td>   
        <td width="125px">{$row['nome']}</td>   
        <td width="125px">{$row['cognome']}</td>   
        <td width="50px">{$row['ruolo']}</td>   
        <td width="50px">{$row['età']}</td>   
        <td width="130px">$costo €</td>   
        <td width="90px">Salute: {$row['forma_fisica']}</td>   
        <td width="90px">Morale: {$row['morale']}</td>   
        </tr> 
END;
}  
echo "</table>";
?>
Ciao...innanzitutto grazie per la risposta!Non ti ci manderei mai,perchè almeno ci provi a darmi una mano! :p
Per prima cosa ho messo il tag <table> fuori dal ciclo while...
Ho provato la tua soluzione sia con AND e con OR e mi restituisce questo errore:

Column 'numero' in order clause is ambiguous
 
Ultima modifica:
ciao
immaginavo, ci avevo penbsato tutta la notte e mi era venuto il dubbio.
se hai pazienza guardo la clausolo UNION e (forse) ti so dire.
ma fai comunque una prova
ORDER BY giov.numero, port.numero
anche se credo che non sia la via giusta
 
Ok,grazie! :)
Provo come mi hai detto!

EDIT:
Ho trovato quest'altra soluzione e funziona :D

PHP:
$query = "SELECT * FROM GIOC_giovani WHERE squadra = '$team' UNION SELECT * FROM GIOC_giovani_port WHERE squadra = '$team' ORDER BY numero ASC";
Grazie mille per l'aiuto!! :)
 
Ultima modifica:
ciao
stavo postando la soluzione che hai trovato, siamo giunti allo stesso punto:),
per quello che riguarda l'id, ora do un occhio poi ti so dire
 
ciao
intanto puoi fare questo
1. nella pagina modifica_num.php metti il nome della pagina in cui hai
td width="30px"><a href="modifica_num.php?id_gioc={$row['id']}">{$row['numero']}</a></td>
(non sapendo come la chiami metto un nome a caso, poi tu lo cambi)

PHP:
<?php
$arrivo=basename($_SERVER['PHP_SELF']);
if($arrivo !="pagina_con_id.php"){
	header("Location: http://www.tuo_dominio.it/pagina_con_id.php/");
}else{
	$id_trasmesso=htmlspecialchars($_GET['id_gioc']);
	//qui tutto quello che devi fare nella pagina modifica_num.php
}
?>
queto impedisce intanto che uno possa scrivere sulla riga di comando del bw l'indirizzo della pagina non riesce ad accedere.
2. poi potresti convertire l'id in una base arbitraria e poi riconvertirlo
PHP:
<?php
while($row = mysql_fetch_array($result)){  
$costo = number_format($row['costo'], "0", "", ".");   
$id_conv=base_convert($row['id'],10,16);//lo converti in esadecimale oppure in una base qualsiasi
//$id_conv=base_convert($row['id'],10,3);
//eventualmete prima di convertirlo poi fare delle operazioni matematiche in modo che il valore dell'id non parta da 1
//es
//$id_mod=$row['id']+33336;
//$id_conv=base_convert($id_mod,10,3);
echo <<<END
    <tr>   
        <td width="30px"><a href="modifica_num.php?id_gioc={$id_conv}">{$row['numero']}</a></td>   
        <td width="125px">{$row['nome']}</td>   
        <td width="125px">{$row['cognome']}</td>   
        <td width="50px">{$row['ruolo']}</td>   
        <td width="50px">{$row['età']}</td>   
        <td width="130px">$costo €</td>   
        <td width="90px">Salute: {$row['forma_fisica']}</td>   
        <td width="90px">Morale: {$row['morale']}</td>   
        </tr> 
END;
}  
echo "</table>";
?>
poi nella pag modifica_num.php lo riporti al valore che deve avere
se non fai operazioni matematiche
PHP:
<?php
//.....
$id_trasmesso=base_convert($_GET['id_gioc'],16,10);//inverti le basi
//....
?>
oppure se fai le operazioni
PHP:
<?php
//....
$id_trasmesso=base_convert($_GET['id_gioc'],3,10)-33336;//inverti le basi e togli quello che avevi sommato
//....
?>
dato che non credo che tu tratti segreti della "casa bianca" dovrebbe essere sufficiente ad impedire quello che dicevi tu, il numero che vedi non è l'id reale
 

Discussioni simili