MySQL Join / relação entre tabelas

03/04/2015

Tenho uma dúvida do que usar na seguinte situação... já li vários tópicos e nada me ajudou pois o join me buga muito a mente uahsuh

Tenho tabela 1:
c_id ~ c_title

Tabela 2:
ca_id ~ ca_title

Tabela 3
r_id ~ ca_id ~ c_id

O que está me matando, é:

A tabela 3 faz a relação entre a tabela 1 e a 2.
Vamos supor que a tabela 2 é uma categoria e a tabela 1 é um produto/post;
1 Produto pode ter várias categorias;

Porém quero tirar todas os produtos que todas as categorias de um produto tem.

Exemplo:

PRODUTO 1 tem categorias BRINQUEDO e FRÁGIL
PRODUTO 2 tem categorias BRINQUEDO, e ALEGRIA
PRODUTO 3 tem categorias ALEGRIA e FRÁGIL

O que se deve mostrar na consulta é quando entro no produto 1 ele tem que puxar todos os produtos das categorias BRINQUEDO E FRÁGIL que seria exatamente:
PRODUTO 1, PRODUTO 2 e PRODUTO 3

Já tentei sem Join nem nada.. funcionou porém ele só pega a primeira categoria que o produto que está selecionado tem, pois não da pra usar foreach nessa :/
Alguém me ajuda :s

-- edit

Depois de muito pensamento, consegui...

SELECT STRAIGHT_JOIN *
FROM courses N
INNER JOIN course_category E ON N.course_id = E.cc_course
WHERE E.cc_course != ? and E.cc_category IN (select cc_category from course_category where cc_course = ?)
GROUP BY E.cc_course LIMIT 3

Espero que ajude quem tem o mesmo problema.. D:

Alecsander Hoppe

Melhor resposta

03/04/2015

Alecsander,

"Porém quero tirar todas os produtos que todas as categorias de um produto tem"... essa frase ficou bem estranha !

Se você quer relacionar todas as categorias de um determinado produto, faça :

Select cat.NomeCategoria
From produtos prod inner join categoria cat on ( prod.id_categoria = cat.id )
Where prod.id = @param_idProduto


Onde "@param_idProduto" é o código do produto que você quer consultar.

Quanto a teoria por trás dos diversos tipos de join, pesquise sobre "teoria dos conjuntos matemáticos"... acredito que isso vai dê "clareada" nas suas dúvidas.

Marcos P

Responder Citar

Outras Respostas

03/04/2015

Alecsander Hoppe

Valeu cara, vou procurar sim..
Mas eu consegui desenvolver o código com base em alguns outros que achei na internet de relação entre 3 tabelas...

A frase realmente ficou estranha, mas é a verdade, estou lhe dando com um sistema de curso, e quando você está dentro de um, o sistema iria procurar os cursos que tem as mesmas categorias, por isto a frase...

Ou seja: (EXEMPLO BEM PRÁTICO, SE ALGUÉM ESTIVER COM A MESMA DÚVIDA)

tabela curso:
curso_id | curso_nome
1 | Curso Foto
2 | Curso Video
3 | Curso Comida

tabela categoria:
categoria_id | categoria nome
1 | Imagem
2 | Gastronomia

tabela de relação categoriaXcurso:
r_id | r_categoria | r_curso
1 | 1 | 1
2 | 1 | 2
3 | 2 | 3

Então a consulta que postei, é para quando você entra em um curso e quer os outros cursos daS mesmaS categoriaS, que não seja ele mesmo.
O meu problema era os S ausiaus mas blz..

Vamos supor que entrei no curso 1 com esta query dando FetchAll

SELECT STRAIGHT_JOIN * 
FROM curso N
INNER JOIN categoriaXcurso E ON N.curso_id = E.r_curso
WHERE E.r_curso != ? and E.r_categoria IN (select r_categoria from categoriaXcurso where r_curso = ?)
GROUP BY E.r_curso


O primeiro ? é o CURSO ATUAL (1)
O segundo ? é o CURSO ATUAL também (1)

Dando o resultado:

CURSO VIDEO (2)

E se tivesse mais cursos cadastrados em uma das categorias do curso 1, também iria aparecer junto com o curso vídeo.
Responder Citar