Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema sintassi INNER JOIN a 3 tabelle

    Ciao a tutti, è la prima volta che chiedo aiuto su questo Forum ... spero di trovare un aiuto !!

    Dunque, ho 3 tabelle composte come segue:


    1) tbl_commenti
    (idcommento, idutente, idpalestra, commento)

    1 1 1 ciao
    2 1 1 Buonasera
    3 2 1 Buongiorno


    2) tbl_user
    (id_utente, nome)

    1 Daniele
    2 Francesco
    22 Arianna
    23 Giulia
    24 Claudio


    3) tbl_risposta_commenti
    (id_commento, id_utente, risposta)

    1 22 come stai
    1 23 bene
    2 22 Buonanotte
    2 24 vado a letto
    3 23 Ben alzato
    3 24 sono le otto


    voglio visualizzare:
    - il nome dell'utente di tbl 1 che inserisce il commento (1=Daniele) ed il commento 1 della 1a tabella (ciao);
    - i nomi degli utenti di tbl 3 che inseriscono la risposta (22=Arianna, 23=Giulia) e le risposte al commento 1 della 3a tabella (come stai, bene);

    con la query che vi riporto sotto, lui mi stampa tutto ciò che voglio [Daniele, ciao, 22 come stai, 23 bene], ma al posto di 22 e 23 vorrei Arianna e Giulia:se scrivo id_utente mi stampa il numero, se scrivo nome mi mette Daniele.
    Io vorrei
    [Daniele, ciao, Arianna come stai, Giulia bene]
    ... un aiutino ?????

    Ecco il codice:

    <?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";
    }

    ?>

    GRAZIEEEE !!!!!

  2. #2
    Ciao Daniele,
    Il problema e che tu devi fare un left join sulla tabella utenti prendendo l'id dalla tabella risposta:
    codice:
    SELECT c.idcommento,
           comment_user.nome,
           response_user.id_utente,
           response_user.nome as "RESPONSE USER", 
           r.risposta
    FROM tbl_commenti c
      LEFT JOIN tbl_risposta_commenti r ON c.idcommento = r.id_commento
      LEFT JOIN tbl_user comment_user ON c.idutente = comment_user.id_utente
      LEFT JOIN tbl_user response_user on r.id_utente = response_user.id_utente
    WHERE c.idpalestra = 1
    ORDER BY c.idcommento

  3. #3
    Grazie Francesco per l'aiuto, vorrei provarlo, ma posso chiederti un ulteriore aiuto:
    puoi farmi l'esempio usando i nomi dei miei campi ? Non capisco a cosa corrisponde c.idcommento, comment_user.nome, ecc.

    .....GRAZIE !!!

  4. #4
    Io ho usato la struttura da te postata

    tbl_commenti
    (idcommento, idutente, idpalestra, commento)

    tbl_user
    (id_utente, nome)

    tbl_risposta_commenti
    (id_commento, id_utente, risposta)

  5. #5
    ... scusa ma ad esempio tbl_user comment_user e response_user io non li vedo sulla mia struttura ...

  6. #6
    Quelli sono gli alias che ho messo nella condizione join e si riferiscono sempre alla stessa tabella (con condizione on diversa) tbl_user
    codice:
     LEFT JOIN tbl_user comment_user ON c.idutente = comment_user.id_utente
      LEFT JOIN tbl_user response_user on r.id_utente = response_user.id_utente

  7. #7
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Quelli sono gli alias che ho messo nella condizione join e si riferiscono sempre alla stessa tabella (con condizione on diversa) tbl_user
    codice:
     LEFT JOIN tbl_user comment_user ON c.idutente = comment_user.id_utente
      LEFT JOIN tbl_user response_user on r.id_utente = response_user.id_utente

    ..ok Grazie !!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.