Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu tenho três tabelas: Uma é os posters, a outra os usuários e a ultima os tópicos. Posters: -----------------------------------------------------------------------------------------------------------
id | topic | titulo | key | pergunta | respostas | criador | criado | editor | editado | status
-----------------------------------------------------------------------------------------------------------
1 | 3 | bla1 | bla | bla | bla | 1 | 8/7/14 | 1 | 8/7/14 | 1 2 | 1 | bla2 | bla | bla | bla | 3 | 8/7/14 | 1 | 8/7/14 | 1
2 | 2 | bla3 | bla | bla | bla | 2 | 8/7/14 | 1 | 8/7/14 | 1 Topicos: ----------------------------------------------------
id | title | key | description | criado | status
----------------------------------------------------
1 | bla1 | bla | bla, bla | 8/7/14 | 1 2 | bla2 | bla | bla, bla | 8/7/14 | 1
3 | bla3 | bla | bla, bla | 8/7/14 | 1 Usuarios: -------------------------------------------------------------------------------
id | name | email | password | thumb | data | status
-------------------------------------------------------------------------------
1 | bla1 | a@g.c | **** | http:// | 8/7/14 | 1 2 | bla2 | a@g.c | **** | http:// | 8/7/14 | 1
3 | bla3 | a@g.c | ****** | http:// | 8/7/14 | 1 E gostaria de associar as tabelas topicos e usuarios com a tabela posters, de forma que os campos criador e editor da tabela posters sejam vinculador com o campo name da tabela usuarios, e topic da tabela posters seja vinculado com o campo title da tabela topicos. Tentei desta forma, mas não obtive sucesso: mysql_query("SELECT a.titulo,a.key,a.pergunta,a.respostas,a.criador,a.criado,a.editor,a.editado,b.title,c.name
FROM posters AS a
INNER JOIN topicos AS b
ON a.topic = b.id
INNER JOIN usuarios AS c
ON a.criador = c.id
OR a.editor = c.id
WHERE a.status = 1
ORDER BY a.editado DESC
LIMIT 10 ").
Motta, sua proposta foi boa em fazer um inner join para cada requisição. Para completar eu fiz isto no campos que serão exibidos, para poder diferencia-los:
c.name AS nameC, e.'name' AS nameE
Mas uma coisa está errada. Ele só esta exibindo os resultados que tem o criador e o editor, necessariamente.
Mas nem sempre o poster irá ser editado. Você teria alguma ideia para não tornar o inner join do editor obrigatório e sim facultativo.
Fiquei pensando, se faz realmente necessário criar dois inner join para a tabela usuarios? A requisição não ficará mais lenta?
Agradeço a sua ajuda, Muito obrigado..
Outer join ...
Motta, eu usei o left outer join, e funfou traquilo. Muito obrigado...
Mas volto a repetir: Se faz realmente necessário criar dois inner join para a tabela usuarios? A requisição não ficará mais lenta?
Tendo índices em geral não, é a melhor solução em geral.
Então ta certo Motta, muito obrigado mesmo por tudo....
mysql_query("SELECT a.
titulo,a.key,a.pergunta,a.respostas,a.criador,a.criado,a.editor,a.editado,b.title,c.name, e.'name'FROM
postersAS aINNER JOIN
topicosAS b ON a.topic= b.idINNER JOIN
usuariosAS c ON a.criador= c.idINNER JOIN
usuariosAS e ON a.criador= e.idWHERE a.
status= 1 ORDER BY a.editadoDESC LIMIT 10 ");Tente "chamar" a tabela duas vezes no join