• User Attivo

    problema con JOIN tra 2 tabelle

    ciao a tutti, ho 2 tabelle:

    TABELLA
    protocollo_attivita
    CAMPO
    referente_1
    CAMPO
    referente_2

    TABELLA
    a_admin
    CAMPO
    id_admin
    CAMPO
    cognome_admin

    e questa è la query:

    [php]
    <?
    $query27="SELECT protocollo_attivita.*, a_admin.cognome_admin AS cognome
    FROM protocollo_attivita, a_admin
    WHERE protocollo_attivita.referente_1 = a_admin.id_admin
    ORDER BY cognome DESC";
    $ris_query27=mysql_query($query27, $conn);
    while($row27=mysql_fetch_array($ris_query27)){?>

    <?=$row27['cognome']?>
    <?
    $query28="SELECT protocollo_attivita.*, a_admin.cognome_admin AS cognome
    FROM protocollo_attivita, a_admin
    WHERE protocollo_attivita.referente_2 = a_admin.id_admin'";
    $ris_query28=mysql_query($query28, $conn);
    $row28=mysql_fetch_array($ris_query28);
    ?>
    <?php
    if ($row27['referente_2']>0)
    {
    ?>
    e <?=$row28['cognome']?>
    <?php
    }
    else
    {
    echo '';
    }
    ?>
    [/php]i cognomi riferiti al campo referente_1 me li stampa correttamente invece dal campo referente_2 mi tira fuori sempre lo stesso cognome anche se controllando nel DB risulta un'altro cognome.
    Dove sbaglio?


  • Super User

    ciao,
    io farei la tua query in questo modo:

    
    select protocollo_attivita.*,
    ref1.cognome_admin as cognome_ref1,
    ref2.cognome_admin as cognome_ref2
    
    from 
    protocollo_attivita inner join a_admin ref1 
    on protocollo_attivita.referente_1 = ref1.id_admin
    
    left join a_admin ref2 
    on protocollo_attivita.referente_2 = ref2.id_admin
    
    order by 
    ref1.cognome_admin , ref2.cognome_admin 
    
    
    

    usando inner e left join riesci ad ottenere il risultato che vuoi facendo una sola query quindi risparmiando risorse sul server.

    p.s. usare * è deprecabile perchè pur funzionando usa più risorse del server rispetto all'elenco degli effettivi campi che ti servono

    p.s.s. quando in una query hai in ballo più di una tabella è consigliabile usare sempre la sintassi nome_tabella.nome_campo

    p.s.s.s. la query l'ho scritta di getto sarebbe da provare 🙂


  • User Attivo

    grazie Tymba