Query su due tabelle

Ho due tabelle in un database. In una sono stati inseriti i dati di partite di calcio con i seguenti campi:

TABELLA TUTTO_RISULTATI:

data partita

categoria

squadra1 (corrispondente alla squadra di casa: avversaria o mia squadra)

squadra2 (corrispondente alla squadra in trasferta: avversaria o mia squadra, quest'ultima quindi sempre presente in ogni record, nel campo squadra1 o squadra2)

risultato1 (sono le reti segnate dalla squadra di casa)

risultato2 (sono le reti segnate dalla squadra in trasferta).

Poichè non sarei mai stato in grado (purtroppo ho conoscenze limitate e consumo ore e ore a fare tentativi) di ottenere una query che mi fornisse, oltre al dettaglio delle partite della squadra selezionata, anche il riepilogo estrapolato dalla stessa tabella, ne ho creata una apposita in cui ogni record costituisce la somma delle gare disputate con ogni singola avversaria:

TABELLA:RIEPILOGATIVA

squadra

totale_partite

totale_vinte

totale_pareggiate

totale_perse

Attualmente, tramite un form che "ricerca" nei campi "squadra1" e "squadra2" la formazione avversaria, ottengo il dettaglio delle partite disputate dalla mia squadra con tale specifica avversaria, fornendomi come risultato i record interessati presenti nella tabella Tutto_risultati (un record per ogni singola partita).

Vorrei adesso poter visualizzare, oltre il dettaglio, anche il record relativo alla medesima squadra avversaria presente nella tabella Riepilogativa, ma proprio non riesco a venirne a capo.

Premesso che per ricavare il dettaglio delle partite ho usato il codice sottoriportato, avrei bisogno di un tangibile aiuto per visualizzare nella stessa pagina sia il dettaglio che il riepilogo?

<?php
$colname_rsPartite = "";
$query_rsPartite = sprintf("SELECT * FROM tutto_risultati WHERE squadra1 Like '%s%s' ORDER BY stagione ASC", $colname_rsPartite,"%");
if (isset($_POST['squadra1'])) {
    $query_rsPartite = "SELECT * FROM tutto_risultati WHERE squadra1 Like '%$_POST[squadra1]%' or squadra2 Like '%$_POST[squadra1]%' ORDER by stagione ASC";
}
if (isset($_POST['stagione'])) {
$colname_rsPartite = (get_magic_quotes_gpc()) ? $_POST['stagione'] : addslashes($_GET['stagione']);
$query_rsPartite = sprintf("SELECT * FROM tutto_risultati WHERE stagione Like '%s%s' ORDER by stagione ASC", $colname_rsPartite,"%");
}
if (isset($_POST['squadra2'])) {
    $query_rsPartite = sprintf("SELECT * FROM tutto_risultati WHERE squadra1 Like '%$_POST[squadra2]%' or squadra2 Like '%$_POST[squadra2]%' ORDER by stagione ASC");
}
if (isset($_POST['categoria'])) {
$colname_rsPartite = (get_magic_quotes_gpc()) ? $_POST['categoria'] : addslashes($_GET['categoria']);
$query_rsPartite = sprintf("SELECT * FROM tutto_risultati WHERE categoria Like '%s%s' ORDER by stagione ASC", $colname_rsPartite,"%");
}
mysql_select_db($database, $db);

$rsPartite = mysql_query($query_rsPartite, $db) or die(mysql_error());
$row_rsPartite = mysql_fetch_assoc($rsPartite);
$totalRows_rsPartite = mysql_num_rows($rsPartite);
inviato 8 anni fa
gilfor
X 0 X

Supponiamo di avere due tabelle A e B con un campo in comune che in A si chiama campo_comune_A e in B si chiama campo_comune_B.

Per legare le due tabelle in una SELECT basta fare così:

SELECT * FROM A, B WHERE A.campo_comune_A = B.campo_comune_B

Alla query vanno aggiunte le altre condizioni WHERE per filtrare i dati.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Scusa Gianni, ma nella tabella A  sono due i campi (squadra1 e squadra2) in comune con quello (squadra) della tabella B. Devo quindi aggiungere  "or A.campo_comune_A2 = B.campo_comune_B"?

risposto 8 anni fa
gilfor
X 0 X

Di quale squadra vuoi ottenere le informazioni presenti nella tabella riepilogativa?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Della stessa squadra di cui eseguo la ricerca con il form (post "squadra1"), che può essere presente, nella tabella <Tutto_risultati> nel campo "squadra1" e/o "squadra2". Tieni presente che il nome del post (squadra1) corrisponde al nome del campo solo per coincidenza (all'inizio non riuscivo a creare una query unica che ricercasse il nome di una squadra contemporaneamente nei due campi, per cui avevo impostato il form con due distinte possibilità di ricerca, denominando per comodità  i post in base al nome dei campi).

risposto 8 anni fa
gilfor
X 0 X

Visto che il campo da incrociare con l'altra tabella non è fisso, allora devi costruire la query "dinamicamente" ovvero dei mettere il nome del campo della tabella A a seconda della selezione dell'utente.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Non so se ho eseguito correttamente le tue indicazioni. Dopo le varie query già inserite nel primo messaggio, ho aggiunto il seguente codice:

$colname_rsRiepilogo = "";
$query_rsRiepilogo = sprintf("SELECT * FROM tutto_risultati, riepilogo_risultati WHERE squadra1 Like '%s%s' ORDER BY stagione ASC", $colname_rsRiepilogo,"%");
if (isset($_POST['squadra1'])) {
   $query_rsRiepilogo = "SELECT * FROM tutto_risultati, riepilogo_risultati WHERE '%$_POST[squadra1]%' = squadra";
}

Praticamente il nome della squadra di cui al campo A, viene recuperato con '%$_POST[squadra1]%'.

Poi ho aggiunto:

$rsRiepilogo = mysql_query($query_rsRiepilogo, $db) or die(mysql_error());
$row_rsRiepilogo = mysql_fetch_assoc($rsRiepilogo);

e quindi ho creato il richiamo per la stampa

<td width="75" bgcolor="#99CCFF"><div align="center" class="Stile4"><span class="Stile8"><?php echo $row_rsRiepilogo['tot_partite']; ?></span></div></td>
      <td width="75" bgcolor="#99CCFF"><div align="center" class="Stile3 Stile5"><span class="Stile8"><?php echo $row_rsRiepilogo['tot_vinte']; ?></span></div></td>

Non mi segnala nessun errore di sintassi od altro, però i due campi riepilogativi rimangono in bianco.

risposto 8 anni fa
gilfor
X 0 X

Le query sono sbagliate perché hanno nella FROM i nomi delle 2 tabelle ma non hanno nella WHERE la condizione per legare la prima tabella alla seconda.

Questa condizione deve essere del tipo "Tabella1.nome_campo1 = Tabella2.nome_campo2"

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda