Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 515672
            [titulo] => MySQL Join / relação entre tabelas
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-04-03 10:54:28
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 378439
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marcos P
            [Apelido] => 
            [Foto] => 378439_20140801115452.png
            [Conteudo] => 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 :

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

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

MySQL Join / relação entre tabelas

Alecsander Hoppe
   - 03 abr 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:

Post mais votado

Marcos P
   - 03 abr 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 :

#Código

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.

Alecsander Hoppe
   - 03 abr 2015

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

Alecsander Hoppe
   - 03 abr 2015

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

#Código

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.