Inner join 3 tables

3

I have the following query.

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

FROM ofertas
INNER JOIN favoritos
ON ofertas.id=favoritos.id_oferta
ORDER BY favoritos.id_user='$login_session'";

In the table of favorites I have id, id_user, offer_id (either simple offer or offer_pro)

In the way that this one, I can do what I want for the table offers. But I have one more table calledprobids that also have the same fields as the offers.

I wanted something of the sort:

    $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 ofertas (e ofertas_pro)
INNER JOIN favoritos
ON ofertas.id=favoritos.id_oferta (e ofertas_pro.id=favoritos.id_oferta)
ORDER BY favoritos.id_user='$login_session'";

Did you understand?

It's like this right now:

$cmd = "SELECT o.id, o.titulo, o.descricao, o.valor, o.user_of, o.categ, o.local, o.fav, f.id_oferta
                    FROM ofertas AS o, favoritos AS f
                    WHERE o.id = f.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 / 15:59

2 answers

2
"SELECT ofertas.id, ofertas.titulo, ofertas.descricao,  ofertas.valor, ofertas.user_of, ofertas.categ, ofertas.local, ofertas.fav, favoritos.id_oferta

FROM ofertas
INNER JOIN favoritos
ON ofertas.id=favoritos.id_oferta
ORDER BY favoritos.id_user='$login_session'";

In the table of favorites I have id, id_user, offer_id (either simple offer or offer_pro)

then ..

SELECT 
favoritos.id,

ofertas.titulo,
ofertas.descricao,  
ofertas.valor, 
ofertas.user_of, 
ofertas.categ, 
ofertas.local, 
ofertas.fav, 
favoritos.id_oferta

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) 

If this represents +/- what you need, I suggest you restructure your tables, after all, offers_pro is an offer, but certainly with some difference, in the offers_pro table you should put the id_offer and what is different! I would like the query

SELECT 
favoritos.id,

ofertas.titulo,
ofertas.descricao,  
ofertas.valor, 
ofertas.user_of, 
ofertas.categ, 
ofertas.local, 
ofertas.fav, 

favoritos.id_oferta

ofertas_pro.informacao1_pro
ofertas_pro.informacao1_pro

FROM ofertas 
INNER JOIN ofertas_pro ON (ofertas.id=ofertas_pro.id_oferta) 
INNER JOIN favoritos ON (ofertas.id=favoritos.id_oferta) 
ORDER BY favoritos.id_user='$login_session'
    
04.09.2015 / 17:01
0

Do something like this:

SELECT o.id, o.titulo, p.outroCampo, f.qualquerCampo
FROM ofertas AS o, ofertas_pro AS p, favoritos AS f
WHERE o.id = f.id_oferta
ORDER BY f.id_user;

You can use INNER JOIN and ON too several times, but I particularly prefer this mode (I do not know if it's more efficient or not).

    
04.09.2015 / 16:37