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.203
207
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.203
207
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
I Sto progettando nuovi siti utilizzando bootstrap e devo dire funziona bene, l'unico problema e la maschera -moz- HTML e CSS 0
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 0
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
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

Discussioni simili