LEFT JOIN with three tables going wrong

-1

Why is this query returning me all the elements of the offer_pro table I want and only the id of the table offers?

is not getting the elements title, description, value, user_of, categ, local, fav, table offers

$cmd="SELECT 
ofertas.id, 
ofertas.titulo, 
ofertas.descricao,  
ofertas.valor, 
ofertas.user_of, 
ofertas.categ, 
ofertas.local, 
ofertas.fav, 

favoritos.id_oferta,

ofertas_pro.id, 
ofertas_pro.titulo, 
ofertas_pro.descricao,  
ofertas_pro.valor, 
ofertas_pro.user_of, 
ofertas_pro.categ, 
ofertas_pro.local, 
ofertas_pro.fav

FROM favoritos 

LEFT JOIN ofertas ON (ofertas.id=favoritos.id_oferta) 
LEFT JOIN ofertas_pro ON (ofertas_pro.id=favoritos.id_oferta)";

I tried removing the reserved local variable but the problem continues. Of the offers I only get the ID field. This way it does not take the rest of the data The complete code is this:

$cmd="SELECT 
    ofertas.id, 
    ofertas.titulo, 
    ofertas.descricao,  
    ofertas.valor, 
    ofertas.user_of, 
    ofertas.categ, 
    ofertas.local, 
    ofertas.fav, 

    favoritos.id_oferta,

    ofertas_pro.id, 
    ofertas_pro.titulo, 
    ofertas_pro.descricao,  
    ofertas_pro.valor, 
    ofertas_pro.user_of, 
    ofertas_pro.categ, 
    ofertas_pro.local, 
    ofertas_pro.fav

    FROM favoritos 

    LEFT JOIN ofertas ON (ofertas.id=favoritos.id_oferta) 
    LEFT JOIN ofertas_pro ON (ofertas_pro.id=favoritos.id_oferta)";
    //ORDER BY f.id_user='$login_session'";*/???



        $produtos = mysql_query($cmd);
        $total = mysql_num_rows($produtos);

    //exibe os produtos 
            echo "<table style= width:auto>";

            echo "<tr>";
            echo "<th>ID</th>";
            echo "<th>Empresa</th>";
            echo "<th>Categoria</th>";
            echo "<th>Serviço</th>";
            echo "<th>Descrição</th>";
            echo "<th>Pagamento</th>";
            echo "<th>Distrito</th>";
            echo "<th>Ações</th>";
            echo "<th>Avaliar</th>";
            echo "<th>Total</th>";
            echo "</tr>";
        while ($produto = mysql_fetch_array($produtos)) {


            echo "<tr>";
            echo "<td>".$produto['id_oferta']."</td>";
            echo "<td>autor:".$produto['user_of'] . "</td>";
            echo "<td>".$produto['categ'] . "</td>";
            echo "<td>".$produto['titulo'] . "</td>";
            echo "<td>".$produto['descricao'] . "</td>";
            echo "<td>".$produto['valor'] . "</td>";
            echo "<td>".$produto['local'] . "</td>";
            echo "<td><a href=aceita.php?id=".$produto['id'].">Aceitar</a></td>";
            echo "<td><a  href=fav.php?id=".$produto['id']."><img src='img/fav.png' height='24' width='24'></a></td>";
            echo "<td>".$produto['fav'] . "</td>";





            echo "</tr>";

        }
            echo "</table>";

    ?>
    
asked by anonymous 04.09.2015 / 21:35

2 answers

0

This happens because the fields have the same name, so I say this at first glance. Try assigning names to fields that have equal names, as follows:

SELECT 
ofertas.id AS oferta_id, 
ofertas.titulo AS oferta_titulo, 
ofertas.descricao AS oferta_descricao,  
ofertas.valor AS oferta_valor, 
ofertas.user_of AS oferta_user_of, 
ofertas.categ AS oferta_categ, 
ofertas.local AS oferta_local, 
ofertas.fav AS oferta_fav, 

favoritos.id_oferta,

ofertas_pro.id AS oferta_pro_id, 
ofertas_pro.titulo AS oferta_pro_titulo, 
ofertas_pro.descricao AS oferta_pro_descricao,  
ofertas_pro.valor AS oferta_pro_valor, 
ofertas_pro.user_of AS oferta_pro_user_of, 
ofertas_pro.categ AS oferta_pro_categ, 
ofertas_pro.local AS oferta_pro_local, 
ofertas_pro.fav AS oferta_pro_fav

FROM favoritos 

LEFT JOIN ofertas ON (ofertas.id=favoritos.id_oferta) 
LEFT JOIN ofertas_pro ON (ofertas_pro.id=favoritos.id_oferta)

Although this seems to me to be the correct solution to the problem, I strongly advise changing the table structure since this seems very wrong. The normal would be to have the table ofertas with a field ofertas.is_pro that if it had the value 1 would be a pro offer, if it had the value 0 would be a normal offer.     

17.09.2015 / 17:05
-1

Try this, and see if it works, I have not tested it, paste the table structure so I can test it here:

SELECT TOTAL.* FROM (
SELECT  ofertas.id, 
        ofertas.titulo, 
        ofertas.descricao,  
        ofertas.valor, 
        ofertas.user_of, 
        ofertas.categ, 
        ofertas.local_of, 
        ofertas.fav
  FROM ofertas
UNION ALL
SELECT ofertas_pro.id, 
ofertas_pro.titulo, 
ofertas_pro.descricao,  
ofertas_pro.valor, 
ofertas_pro.user_of, 
ofertas_pro.categ, 
ofertas_pro.local_of, 
ofertas_pro.fav
  FROM ofertas_pro 
  WHERE ofertas_pro.id IN (SELECT ofertas_pro.id from ofertas,
                           SELECT favoritos.id_oferta from favoritos) 
) TOTAL
;
    
04.09.2015 / 22:40