MySQL Join / relação entre tabelas
03/04/2015
0
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:
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
Curtir tópico
+ 0
Responder
Post mais votado
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 :
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.
"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
Mais Posts
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
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.
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
Clique aqui para fazer login e interagir na Comunidade :)