Problema sintassi INNER JOIN a 3 tabelle

Daniele Rapinesi

Utente Attivo
7 Gen 2014
60
0
0
Ciao a tutti,
ho 3 tabelle composte come segue:
1) tbl_commenti (idcommento, idutente, idpalestra, commento)
2) tbl_user (id_utente, nome)
3) tbl_risposta_commenti (id_commento, id_utente, risposta)

voglio visualizzare:
- l'idutente (non il numero ma il nome contenuto in tbl_user) ed il commento della 1a tabella;
- l'id_utente (non il numero ma il nome contenuto in tbl_user) e la risposta della 3a tabella;

con la query che vi riporto sotto, lui mi stampa tutto ciò che voglio tranne l'id_utente (nome) della risposta: se scivo id_tente mi stampa il numero, se scrivo nome mi mette quello della tabella 1. Supponiamo che il nome corrispondente ad idutente di tabella 1 sia Daniele e e quello di id_utente tabella 3 sia Marco, mi stampa correttamente Daniele con il commento, ma con la risposta mi stampa il numero dell'utente e non il nome Marco ... un aiutino ?????
Ecco il codice:

PHP:
<?php 
$query = "SELECT * FROM tbl_commenti WHERE idpalestra = $idpalestra";
$res = mysql_query($query);
$row = mysql_fetch_assoc ($res);

if (mysql_num_rows($res)>0)	
	{

	$query = "
	SELECT 
	tbl_commenti.idcommento, 
	tbl_commenti.idpalestra, 
	tbl_commenti.commento, 
	tbl_commenti.idutente, 
	tbl_commenti.data_inserimento, 
	tbl_user.id_utente, 
	tbl_user.nome, 
	tbl_risposta_commenti.idrisposta, 
	tbl_risposta_commenti.id_commento, 
	tbl_risposta_commenti.id_utente, 
	tbl_risposta_commenti.risposta, 
	tbl_risposta_commenti.data_inserimento_r 
	FROM 
	tbl_commenti
	
	JOIN 
	tbl_user 
	ON 
	tbl_commenti.idutente = tbl_user.id_utente 
	
	JOIN 
	tbl_risposta_commenti 
	ON 
	tbl_commenti.idcommento = tbl_risposta_commenti.id_commento 
	
	WHERE idpalestra = '$idpalestra' 
	ORDER BY idcommento";

	$res = mysql_query($query);
	$row = mysql_fetch_assoc($res);
	$act_idcommento = $row['idcommento'];
?>
        <tr><td>L'utente <?php echo $row['nome'] ?></td></tr>
        <tr><td>ha scritto: <?php echo $row['commento'] ?></td></tr>
        <tr><td>L'utente <?php echo $row['id_utente'] ?></td></tr>
        <tr><td>ha risposto: <?php echo $row['risposta'] ?></td></tr>
<?php
	while ($row = mysql_fetch_assoc($res)){
		if ($act_idcommento == $row['idcommento']){
?>
        <tr><td>L'utente <?php echo $row['id_utente'] ?></td></tr>
        <tr><td>ha risposto: <?php echo $row['risposta'] ?></td></tr>
<?php

		} else {
			$act_idcommento = $row['idcommento'];
?>
                <tr><td>L'utente <?php echo $row['nome'] ?></td></tr>
                <tr><td>ha scritto: <?php echo $row['commento'] ?></td></tr>
                <tr><td>L'utente <?php echo $row['id_utente'] ?></td></tr>
                <tr><td>ha risposto: <?php echo $row['risposta'] ?></td></tr>
<?php
		}
			
	}
}
else 	{
	echo "Non ci sono commenti per questa struttura";
}

?>
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
ciao,
per ottenere il nome, dovresti fare una quarta join cercando di assegnare un alias alla tabella utenti,

ma, partendo dal presupposto che gli utenti delle tabelle commenti e risposte, ESISTONO sicuramente
nella tabella utenti, si può ... semplificare con una sola joint tra due select ...
la scrivo con qualche separazione ... per mia comprensione
Codice:
SELECT
  CO.idpalestra, 

  CO.idcommento,
  CO.commento, 
  CO.data_inserimento, 
  CO.idutente, 
  CO.nome,

  RI.idrisposta, 
  RI.risposta, 
  RI.data_inserimento_r,
  RI.id_utente, 
  RI.nome

FROM
(SELECT 
  tbl_commenti.idpalestra, 
  tbl_commenti.idcommento,
  tbl_commenti.commento, 
  tbl_commenti.data_inserimento, 
  tbl_commenti.idutente, 
  tbl_user.nome
FROM 
  tbl_commenti,
  tbl_user
WHERE tbl_commenti.idpalestra = '1'
AND   tbl_user.id_utente = tbl_commenti.idutente) CO

LEFT JOIN
(SELECT 
  tbl_risposta_commenti.id_commento, 
  tbl_risposta_commenti.idrisposta, 
  tbl_risposta_commenti.risposta, 
  tbl_risposta_commenti.data_inserimento_r,
  tbl_risposta_commenti.id_utente, 
  tbl_user.nome
FROM
  tbl_risposta_commenti,
  tbl_user
WHERE tbl_user.id_utente = tbl_risposta_commenti.id_utente) RI
ON CO.idcommento = RI.id_commento

ORDER BY CO.idcommento, RI.idrisposta
ovviamente al posto di 1 devi mettere l'id della palestra

il risultato è questo,
Codice:
1	1	commento1	2014-08-01 12:00:00.000	1	utente1	2	c1_risposta2	2014-08-01 12:00:00.000	11	utente11
1	2	commento2	2014-08-01 12:00:00.000	3	utente3	NULL	NULL	NULL	NULL	NULL
1	3	commento3	2014-08-01 12:00:00.000	6	utente6	5	c3_risposta5	2014-08-01 12:00:00.000	6	utente6
1	3	commento3	2014-08-01 12:00:00.000	6	utente6	12	c3_risposta12	2014-08-01 12:00:00.000	5	utente5
1	10	commento10	2014-08-01 12:00:00.000	1	utente1	NULL	NULL	NULL	NULL	NULL
le colonne sono in ordine come select principale

attento ai null quando non esistono risposte (li avresti anche con la tua soluzione)
ciao
Marino
 

marino51

Utente Attivo
28 Feb 2013
3.016
174
63
Lombardia
Però non capisco cosa é CO.nome e RI.nome .... Il nome dell'utente sta solo nella tabella user ...

CO e RI sono le due "tabelle virtuali" create con le due select,
se noti,
la prima select contiene i commenti con il rispettivo user che l'ha generato
la seconda select invece contiene le risposte con, altrettanto, lo user che l'ha generato
la join unisce il risultato delle due tabelle che hanno assunto il nome CO e RI,
vedi l'alias dopo la parentesi di chiusura,
quindi pur mantenendo i nomi dei campi, questi sono associati all' alias della select/tabella
ciao
Marino
 
Discussioni simili
Autore Titolo Forum Risposte Data
J [MySQL] Problema di sintassi? MySQL 1
K problema di sintassi con le stringhe PHP 5
E problema di sintassi su una select (plugin) PHP 5.3 PHP 3
G Mysql problema di sintassi PHP 2
G Problema sintassi INSERT INTO Classic ASP 2
L problema sintassi href Classic ASP 2
8 Problema probabilmente di sintassi su visualizzazione riga database PHP 2
B Un problema con la sintassi di un collegamento.. PHP 1
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1
D problema php mysql PHP 1
M Problema Wi-Fi Linux Linux e Software 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
Daniele_Carrara Problema Aperture Mailup Email Marketing 5
F PROBLEMA ACCESSO INSTAGRAM Discussioni Varie 2
R Problema connessione db PHP 7
M problema if PHP 2
G Problema con Get page PHP 4
N Problema passaggio variabili tra pagine PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
H problema carrello woocommerce PHP 2
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
M Problema su query JOIN in tre tabelle PHP 0
S Problema esportazione tabelle Mysql in Excel PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
M Problema su update di 3 tabelle PHP 1
T problema con select dinamica con jquery Javascript 0
A Problema checkout carrello php PHP 2
R Problema al server Domini 0

Discussioni simili