Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou desenvolvendo uma consulta num BD do MYSQL, em que consegui sem problemas listar as características de produtos armazenadas numa tabela com chave estrangeira da tabela produtos. Porém, não estou conseguindo incluir neste Select uma terceira tabela. O SQL da consulta entre duas tabelas que está funcionado é o seguinte:
SELECT
psd_produtos.prd_id,
psd_produtos.prd_codigo,
psd_produtos.ctg_id,
psd_produtos.sct_id,
psd_produtos.prd_nome,
psd_produtos.prd_detalhe,
psd_produtos.prd_descricao,
psd_produtos.prd_valor,
psd_produtos.prd_foto1,
psd_produtos.prd_foto2,
psd_produtos.prd_foto3,
psd_produtos.prd_condicoes,
psd_produtos.prd_itens,
psd_produtos.prd_estoque,
psd_produtos.prd_tmpespera,
psd_cores.crs_id,
psd_cores.prd_id,
psd_cores.crs_cores,
psd_cores.crs_quantidade
FROM
psd_produtos RIGHT OUTER JOIN psd_cores ON psd_produtos.prd_id = psd_cores.prd_id
WHERE
(psd_produtos.prd_id = '5')
Não estou conseguindo adicionar a terceira tabela, que assim como a segunda, do código acima, tem como chave estrangeira o campo psd_produtos.prd_id. Como adiciono a terceira tabela, que também terá como clausula where o valor que for atribuído ao campo psd_produtos.prd_id através de uma variável do PHP, que no exemplo acima está com um valor de teste?
A tabela e seus campos que desejo inserir são os seguintes:
Tabela: psd_sabores,
Campos
psd_sabores.sbr_id,
psd_sabores.prd_id,
psd_sabores.sbr_sabor,
psd_sabores.sbr_quantidade,
Fiz vários testes e em todos eles não consegui meu objetivo, que é fazer uma select em que quando um determinado produto for selecionado (na clausula where), seja feita uma consulta em duas tabelas que guardam características indeterminadas e diferentes dele e traga o resultado para ser usado numa página.
Ocorre que me retorna a informação de "Erro na execução do comando SQL" no SQL Builder do Scriptcase, onde faço testes de códigos SQL:
Seguindo tua sugestão de adicionar outros RIGHT OUTER JOIN, o código ficaria assim, postando somente a ultima parte do SQL com a adição da tabela :
psd_cores.crs_id,
psd_cores.prd_id,
psd_cores.crs_cores,
psd_cores.crs_quantidade
psd_sabores.crs_id,
psd_sabores.prd_id,
psd_sabores.crs_cores,
psd_sabores.crs_quantidade
FROM
psd_produtos RIGHT OUTER JOIN psd_cores ON psd_produtos.prd_id = psd_cores.prd_id
psd_produtos RIGHT OUTER JOIN psd_sabores ON psd_produtos.prd_id = psd_sabores.prd_id
WHERE
(psd_produtos.prd_id = '5')
Essa solução eu havia tentando e retornado a referida mensagem de erro.
**Aureo Almeida**
Eu não sei o seu intuido em usar o comando "RIGHT OUTER JOIN", mas eu acredito que para o que você queira fazer o comando "INNER JOIN" deva funcionar muito mais fácil.
Então o seu comando SQL deve ficar como abaixo:
SELECT
A.prd_id
,A.prd_codigo
,A.ctg_id
,A.sct_id
,A.prd_nome
,A.prd_detalhe
,A.prd_descricao
,A.prd_valor
,A.prd_foto1
,A.prd_foto2
,A.prd_foto3
,A.prd_condicoes
,A.prd_itens
,A.prd_estoque
,A.prd_tmpespera
,**B**.crs_id
,**B**.prd_id
,**B**.crs_cores
,**B**.crs_quantidade
,**C**.sbr_id
,**C**.prd_id
,**C**.sbr_sabor
,**C**.sbr_quantidade
FROM psd_produtos **A** INNER JOIN
psd_cores **B** INNER JOIN
psd_sabores **C**
WHERE **A**.PRD_ID = **B**.PRD_ID
AND **B**.PRD_ID = **C**.PRD_ID
AND **A**.PRD_ID = ".$_POST['codigo'] -- se for via POST
--ou
--AND **A**.PRD_ID = ".$_GET['codigo'] -- se for via GET
--ou para o seu teste coloque o valor desejado
--AND **A**.PRD_ID = '5'
***! LEMBRANDO QUE***, na sua dúvida você colocou no seu **WHERE** o comando abaixo:
(psd_produtos.prd_id = '5')
Não sei como você especificou no seu BANCO DE DADOS, mas se o seu campo ***PRD_ID*** for um ***númerico*** você deve colocar apenas ***5*** sem as **aspas simples ( ' )**, no código que lhe apresento acima, estou pegando o valor digitado no campo ***INPUT TYPE="TEXT" ***que tem o name ***CODIGO *** e já colocando dentro da claúsula **WHERE**, se o seu campo for do tipo (*VARCHAR; CHAR, etc...*) então você precisa colocar aspas simples, depois aspas dupla e um ponto no começo e depois inverter no final colocando um ponto, depois aspas dupla e por ultimo aspas simples ficando deste jeito **-->** caso POST** '".$_POST['NomeDoSeuTextBox']."';** caso GET** '".$_GET['NomeDoSeuTextBox']."';** caso contrário você pode usar o comando que mandei mesmo.
Eu declarei para os nomes das tabelas com os valores "**A**", "**B**" e "**C**", mas você pode usar qualquer outro nome, **PRODUTO** no lugar do **A**, **CORES** no lugar do **B** e **SABORES** no lugar do **C**, não esquecendo de trocar todos para o mesmo nome, vou deixar marcado com cores diferentes caso você queira renomear.
Espero ter ajudado.
Att.
***Felipe Coutinho***
Não sei se entendi o problema :
para acrescentar mais "jons" faça
FROM
psd_produtos RIGHT OUTER JOIN psd_cores ON psd_produtos.prd_id = psd_cores.prd_id
psd_produtos RIGHT OUTER JOIN xoto on ...
psd_cores RIGHT OUTER JOIN xpto2 on ...
>
Citar
Não estou conseguindo adicionar a terceira tabela
qual o erro/problema ?