Ir para conteúdo

POWERED BY:

Arquivado

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

Moran

JOIN em tres tabelas

Recommended Posts

e ai pessoal. to com um probleminha aqui.

mas umavez conto com a paciencia e sabedoria de vocês.

 

 

bom eu necessito mostrar na tela os seguintes dados.

 

Produto | quantidade | valor(uni) | valor total( de cada produto|

 

e acredito que usando o JOIN eu consigo fazer isso.

 

No inicio:

Agora estou primeiramente tentando mostrar o:

 

Produto | Quantidade | valor(uni)

 

e para isso estou dando uma olhada em JOIN..

tenho o seguinte codigo:

 

$sql="SELECT carrinho.*, produto.`id_produtos` AS produto, clinte.`id_cliente` AS cliente FROM `produto` AS carrinho INNER JOIN `produto` AS produto ON carrinho.`produto_id_produtos` = produto.`id_produtos` INNER JOIN `cliente` AS cliente ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE (carrinho.`cliente_id_cliente` = cliente.`id_cliente`) ORDER BY carrinho.`produto_id_produtos` ASC";

 

mas esta me aparecendo o seguinte erro

#1054 - Unknown column 'clinte.id_cliente' in 'field list'

-------------------------------------------------------------------------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz algumas alterações nas ASPAS SIMPLES que você colocou

Faça o teste assim...

 

$sql = "SELECT carrinho.*, produto.id_produtos AS produto, clinte.id_cliente AS cliente FROM produto INNER JOIN carrinho ON carrinho.produto_id_produtos = produto.id_produtos INNER JOIN cliente ON carrinho.cliente_id_cliente = cliente.id_cliente WHERE (carrinho.cliente_id_cliente = cliente.id_cliente) ORDER BY carrinho.produto_id_produtos ASC";

 

Qualquer coisa, siga esta Syntax SQL INNER JOIN

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas esta me aparecendo o seguinte erro

#1054 - Unknown column 'clinte.id_cliente' in 'field list'

 

 

O nome não seria cliente ao invés de clinte?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal value pelas dicas...

 

é verdade escrevi errado cliente.

 

bom vou precisar de maos uma ajuda na questão do JOIN.

 

tenho o seguinte codigo:

 

$sql="SELECT carrinho.*, produto.`id_produtos` AS produto, clinte.`id_cliente` AS cliente FROM `produto` AS carrinho INNER JOIN `produto` AS produto ON carrinho.`produto_id_produtos` = produto.`id_produtos` INNER JOIN `cliente` AS cliente ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE (carrinho.`cliente_id_cliente` = '".$id_cliente."'	) ORDER BY carrinho.`produto_id_produtos` ASC";

 

com esse codigo estou querendo unir 3 tabelas, mas quero que mostre apenas de uma determinado cliente( por exemplo, se no lugar de '".$id_cliente."' eu tiver o valor 6, eu quero unir as 3 tabelas para mostrar.

 

id_cliente | Produto | quantidade | valor |

 

 

 

id_cliente -> tabela cliente.

Produto e valor -> da tabela produto.

quantidade -> da tabela carrinho.

 

 

 

erro que esta me aparecendo #1054 - Unknown column 'clinte.id_cliente' in 'field list'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente ainda está com erro de digitação em um local

 

substitua por

 

$sql="SELECT carrinho.*, produto.`id_produtos` AS produto, cliente.`id_cliente` AS cliente FROM `produto` AS carrinho INNER JOIN `produto` AS produto ON carrinho.`produto_id_produtos` = produto.`id_produtos` INNER JOIN `cliente` AS cliente ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE (carrinho.`cliente_id_cliente` = '".$id_cliente."' ) ORDER BY carrinho.`produto_id_produtos` ASC";

 

deve pelo menos mudar de erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario, mudou o erro..

 

#1054 - Unknown column 'carrinho.cliente_id_cliente' in 'where clause'

 

se alguem puder me ajudar, agradeceira muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é o mesmo só mudou a coluna que não é encontrada

 

Post as estruturas destas tabelas pois acredito que este campo cliente_id_cliente não existe na tabela carrinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é o mesmo só mudou a coluna que não é encontrada

 

Post as estruturas destas tabelas pois acredito que este campo cliente_id_cliente não existe na tabela carrinho

 

 

Existe sim...
vou mostrar...
--
--- Estrutura da tabela `cliente`
--

CREATE TABLE IF NOT EXISTS `cliente` (
 `id_cliente` int(255) NOT NULL AUTO_INCREMENT,
 `nome_cli` varchar(500) NOT NULL,
 `telefone_cli` varchar(100) NOT NULL,
 `endereco_cli` varchar(200) NOT NULL,
 `bairro_cli` varchar(200) NOT NULL,
 `numero_cli` varchar(45) NOT NULL,
 `complemento_cli` varchar(45) NOT NULL,
 `email_cli` varchar(300) NOT NULL,
 `senha_cli` varchar(45) NOT NULL,
 `pergunta_cli` varchar(500) NOT NULL,
 `resposta_cli` varchar(200) NOT NULL,
 PRIMARY KEY (`id_cliente`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Extraindo dados da tabela `cliente`
--

INSERT INTO `cliente` (`id_cliente`, `nome_cli`, `telefone_cli`, `endereco_cli`, `bairro_cli`, `numero_cli`, `complemento_cli`, `email_cli`, `senha_cli`, `pergunta_cli`, `resposta_cli`) VALUES
(6, 'cadastro', '53-87987979', 'seila', 'cidade', '222', '', 'cadastro@hotmail.com', 'c900a8bc5d4793472a1f3a4b1b5139a2', 'qual é o meu nome', 'cadastro'),
(7, 'teste', '53-87987979', 'seila', 'cidade', '222', '', 'teste@hotmail.com', 'a0b42a1a9de89a34bc6271d2b403fdaa', 'qual é o meu nome', 'teste');

-- --------------------------------------------------------

--
-- Estrutura da tabela `produto`
--

CREATE TABLE IF NOT EXISTS `produto` (
 `id_produtos` int(11) NOT NULL AUTO_INCREMENT,
 `produto` varchar(500) NOT NULL,
 `descricao` varchar(500) NOT NULL,
 `valor` double(10,2) NOT NULL,
 `especie` varchar(100) NOT NULL,
 `img` blob NOT NULL,
 `principal` varchar(45) NOT NULL,
 `adm_id_adm` int(11) DEFAULT NULL,
 PRIMARY KEY (`id_produtos`),
 KEY `fk_produto_adm` (`adm_id_adm`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

--
-- Extraindo dados da tabela `produto`
--

INSERT INTO `produto` (`id_produtos`, `produto`, `descricao`, `valor`, `especie`, `img`, `principal`, `adm_id_adm`) VALUES
(7, 'Lapis', 'Faber castel', 2.00, 'escritorio', 0x6172717569766f732f703734323536622e706e67, 'principal', NULL),
(10, 'Estojo', 'sei la', 2.10, 'escritorio', 0x6172717569766f732f46616265722d43617374656c6c2d457475692d322d50656e732d42726f776e2d78696d6167652e706e67, 'principal', NULL);

-- --------------------------------------------------------

--
-- Restrições para a tabela `carrinho`
--
ALTER TABLE `carrinho`
 ADD CONSTRAINT `fk_carrinho_cliente` FOREIGN KEY (`cliente_id_cliente`) REFERENCES `cliente` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
 ADD CONSTRAINT `fk_carrinho_produto1` FOREIGN KEY (`produto_id_produtos`) REFERENCES `produto` (`id_produtos`) ON DELETE NO ACTION ON UPDATE NO ACTION;

--
-- Restrições para a tabela `produto`
--
ALTER TABLE `produto`
 ADD CONSTRAINT `fk_produto_adm` FOREIGN KEY (`adm_id_adm`) REFERENCES `adm` (`id_adm`) ON DELETE NO ACTION ON UPDATE NO ACTION;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Compartilhar este post


Link para o post
Compartilhar em outros sites

onde foi criada a tabela carrinho?

 

só vi um ALTER TABLE `carrinho`

Compartilhar este post


Link para o post
Compartilhar em outros sites

onde foi criada a tabela carrinho?

 

só vi um ALTER TABLE `carrinho`

 

 

Bah desculpa..

 

enviei mau..

 

ta em baixo..


--
-- Estrutura da tabela `carrinho`
--

CREATE TABLE IF NOT EXISTS `carrinho` (
 `id_carrinho` int(11) NOT NULL AUTO_INCREMENT,
 `quantidade` int(255) NOT NULL,
 `sessao` text NOT NULL,
 `cliente_id_cliente` int(255) NOT NULL,
 `produto_id_produtos` int(255) NOT NULL,
 PRIMARY KEY (`id_carrinho`),
 KEY `fk_carrinho_cliente` (`cliente_id_cliente`),
 KEY `fk_carrinho_produto1` (`produto_id_produtos`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=43 ;

--
-- Extraindo dados da tabela `carrinho`
--

INSERT INTO `carrinho` (`id_carrinho`, `quantidade`, `sessao`, `cliente_id_cliente`, `produto_id_produtos`) VALUES
(39, 5, '6j8v70fjd2fucm8oscl4u16p17', 6, 10),
(40, 5, '6j8v70fjd2fucm8oscl4u16p17', 6, 7),
(41, 1, 'ut8jp3a588jfbpb6g7kegoosp4', 7, 10),
(42, 1, 'ut8jp3a588jfbpb6g7kegoosp4', 7, 7);

-- --------------------------------------------------------

--
-- Estrutura da tabela `cliente`
--

CREATE TABLE IF NOT EXISTS `cliente` (
 `id_cliente` int(255) NOT NULL AUTO_INCREMENT,
 `nome_cli` varchar(500) NOT NULL,
 `telefone_cli` varchar(100) NOT NULL,
 `endereco_cli` varchar(200) NOT NULL,
 `bairro_cli` varchar(200) NOT NULL,
 `numero_cli` varchar(45) NOT NULL,
 `complemento_cli` varchar(45) NOT NULL,
 `email_cli` varchar(300) NOT NULL,
 `senha_cli` varchar(45) NOT NULL,
 `pergunta_cli` varchar(500) NOT NULL,
 `resposta_cli` varchar(200) NOT NULL,
 PRIMARY KEY (`id_cliente`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Extraindo dados da tabela `cliente`
--

INSERT INTO `cliente` (`id_cliente`, `nome_cli`, `telefone_cli`, `endereco_cli`, `bairro_cli`, `numero_cli`, `complemento_cli`, `email_cli`, `senha_cli`, `pergunta_cli`, `resposta_cli`) VALUES
(6, 'cadastro', '53-87987979', 'seila', 'cidade', '222', '', 'cadastro@hotmail.com', 'c900a8bc5d4793472a1f3a4b1b5139a2', 'qual é o meu nome', 'cadastro'),
(7, 'teste', '53-87987979', 'seila', 'cidade', '222', '', 'teste@hotmail.com', 'a0b42a1a9de89a34bc6271d2b403fdaa', 'qual é o meu nome', 'teste');

-- --------------------------------------------------------

--
-- Estrutura da tabela `produto`
--

CREATE TABLE IF NOT EXISTS `produto` (
 `id_produtos` int(11) NOT NULL AUTO_INCREMENT,
 `produto` varchar(500) NOT NULL,
 `descricao` varchar(500) NOT NULL,
 `valor` double(10,2) NOT NULL,
 `especie` varchar(100) NOT NULL,
 `img` blob NOT NULL,
 `principal` varchar(45) NOT NULL,
 `adm_id_adm` int(11) DEFAULT NULL,
 PRIMARY KEY (`id_produtos`),
 KEY `fk_produto_adm` (`adm_id_adm`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

--
-- Extraindo dados da tabela `produto`
--

INSERT INTO `produto` (`id_produtos`, `produto`, `descricao`, `valor`, `especie`, `img`, `principal`, `adm_id_adm`) VALUES
(7, 'Lapis', 'Faber castel', 2.00, 'escritorio', 0x6172717569766f732f703734323536622e706e67, 'principal', NULL),
(10, 'Estojo', 'sei la', 2.10, 'escritorio', 0x6172717569766f732f46616265722d43617374656c6c2d457475692d322d50656e732d42726f776e2d78696d6167652e706e67, 'principal', NULL);

-- --------------------------------------------------------

--
-- Restrições para as tabelas dumpadas
--

--
-- Restrições para a tabela `carrinho`
--
ALTER TABLE `carrinho`
 ADD CONSTRAINT `fk_carrinho_cliente` FOREIGN KEY (`cliente_id_cliente`) REFERENCES `cliente` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
 ADD CONSTRAINT `fk_carrinho_produto1` FOREIGN KEY (`produto_id_produtos`) REFERENCES `produto` (`id_produtos`) ON DELETE NO ACTION ON UPDATE NO ACTION;

--
-- Restrições para a tabela `produto`
--
ALTER TABLE `produto`
 ADD CONSTRAINT `fk_produto_adm` FOREIGN KEY (`adm_id_adm`) REFERENCES `adm` (`id_adm`) ON DELETE NO ACTION ON UPDATE NO ACTION;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;




Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom não consegui visualizar erro de digitação agora mas tem pelo menos erro de tipos pois o campo é numerico e esta comparando com texto

 

tire as aspas simples da consulta

 

$sql="SELECT carrinho.*, produto.`id_produtos` AS produto, cliente.`id_cliente` AS cliente FROM `produto` AS carrinho INNER JOIN `produto` AS produto ON carrinho.`produto_id_produtos` = produto.`id_produtos` INNER JOIN `cliente` AS cliente ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE (carrinho.`cliente_id_cliente` = ".$id_cliente." ) ORDER BY carrinho.`produto_id_produtos` ASC";

 

veja ai que erro ocorre ou se resolve

 

-------------

 

Editado

 

Tem um alias esquisito ali

 

`produto` AS carrinho isso pode está dando problemas pois tem uma tabela com o mesmo nome mude pelo menos para outro alias antes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario, continua me dando erro

#1054 - Unknown column 'carrinho.cliente_id_cliente' in 'where clause'

 

MArio abusando da sua bondade.

Se fosse você que estivesse fazendo como você faria esse join

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi de sua estrutura faria assim

 

Veja se vai agora

 

$sql="SELECT carrinho.*, produto.`id_produtos`, cliente.`id_cliente` FROM (`carrinho` INNER JOIN `produto` ON carrinho.`produto_id_produtos` = produto.`id_produtos`) INNER JOIN `cliente` ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE carrinho.`cliente_id_cliente` = ".$id_cliente." ORDER BY carrinho.`produto_id_produtos` ASC";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi de sua estrutura faria assim

 

Veja se vai agora

 

$sql="SELECT carrinho.*, produto.`id_produtos`, cliente.`id_cliente` FROM (`carrinho` INNER JOIN `produto` ON carrinho.`produto_id_produtos` = produto.`id_produtos`) INNER JOIN `cliente` ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE carrinho.`cliente_id_cliente` = ".$id_cliente." ORDER BY carrinho.`produto_id_produtos` ASC";

 

 

show cara.. vou ver o teu codigo e ver o que errei..

 

Mais uma pergunta.

com esse JOIN eu consigo usando o While, pegar todos os valores das colunas das 3 tabelas ??

 

Pelo que vi de sua estrutura faria assim

 

Veja se vai agora

 

$sql="SELECT carrinho.*, produto.`id_produtos`, cliente.`id_cliente` FROM (`carrinho` INNER JOIN `produto` ON carrinho.`produto_id_produtos` = produto.`id_produtos`) INNER JOIN `cliente` ON carrinho.`cliente_id_cliente` = cliente.`id_cliente` WHERE carrinho.`cliente_id_cliente` = ".$id_cliente." ORDER BY carrinho.`produto_id_produtos` ASC";

Mais uma pergunta.

com esse JOIN eu consigo usando o While, pegar todos os valores das colunas das 3 tabelas ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi sua pergunta mas corrigiu o problema anterior?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi sua pergunta mas corrigiu o problema anterior?

 

 

Corrigiu sim..

eu queri saber assim.

nesse JOIN eu to acessando as seguintes informações

id_carrinho | quantidade | sessão | cliente_id_cliente | produto_id_produtos | id_produtos | id_cliente |

 

--------------------------------------------------------------------------------------------------------------------

 

Agora como eu faria para mostrar mais dados, como Nome do Cliente | VALOR | ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta selecionar também na consulta

 

Tudo o que você quiser basta adiciona na consulta

 

Se forem todos os campos pode usar até o *

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

acabei lendo sua dúvida... achei interessante.

 

Bom sugiro que você faça assim:

 

   SELECT cliente.id_cliente
   cliente.nome_cli
   carrinho.id_carrinho,
          carrinho.quantidade,
          carrinho.sessao,
          carrinho.cliente_id_cliente,
          carrinho.produto_id_produto,
          produto.valor
     FROM carrinho
INNER JOIN produto ON (produto.id_produtos = carrinho.produto_id_produtos)
INNER JOIN cliente ON (cliente.id_cliente  = carrinho.cliente_id_cliente)
    WHERE carrinho.cliente_id_cliente = ".$id_cliente."
 ORDER BY carrinho.produto_id_produtos ASC;

 

Bom sugiro você:

 

1 - Passar os campos que você deseja retornar na sua pesquisa.

 

2 - Tome cuidado com o INNER JOIN, pois ele pode não retornar o que você esta esperando, por isso, estude mais sobre INNER, LEFT e RIGHT JOIN, pois eles podem trazer resultados totalmente diferentes.

 

3 - Repare que no codigo acima, no INNER JOIN de produto e cliente, repare que coloquei logo após do ON. Isso significa que ele dará a prioridade para quem esta perto do ON e isso é a forma "correta", não que a forma que você fez não irá funcionar, pelo contrario; Mas desta forma que estou mostrando é o mais correto.

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.