Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jadsonlucena

Como dar inner join em dois campos do mesmo select

Recommended Posts

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 ");

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 `posters` AS a

INNER JOIN `topicos` AS b ON a.`topic` = b.`id`

INNER JOIN `usuarios` AS c ON a.`criador` = c.`id`

INNER JOIN `usuarios` AS e ON a.`criador` = e.`id`

WHERE a.`status` = 1 ORDER BY a.`editado` DESC LIMIT 10 ");

 

Tente "chamar" a tabela duas vezes no join

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tendo índices em geral não, é a melhor solução em geral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.