Jump to content
wesleycsilva

Consulta

Recommended Posts

Tem uma tabela que relaciona os produtos de uma determinada compra, onde preciso consultar diversos produtos e retornar os ids das compras que tenham todos os produtos que consultei, em uma estrutura parecida com o exemplo abaixo:

 

SELECT  * FROM  produtos_has_compras WHERE (idProduto = 6 AND idProduto = 77 AND idProduto = 11) GROUP BY idCompra;

 

Alguém teria uma solução que possa me ajudar?

Share this post


Link to post
Share on other sites

Segue exemplo:

 

SQLs a SER UTILIZADAS

CREATE TABLE produtos (
	idProduto INT NOT NULL AUTO_INCREMENT,
	nomeProduto VARCHAR(50) NOT NULL,
	PRIMARY KEY(idProduto)
);
INSERT INTO produtos (nomeProduto) VALUES
('Suco de Laranja'),
('Fita Branca'),
('Linha Branca'),
('Creme');

CREATE TABLE compras (
	idCompra INT NOT NULL AUTO_INCREMENT,
	dataCompra DATE NOT NULL,
	PRIMARY KEY(idCompra)
);
INSERT INTO compras (dataCompra) VALUES
(CURRENT_DATE),
(CURRENT_DATE);

CREATE TABLE produtos_has_compras (
	idItem INT NOT NULL AUTO_INCREMENT,
	idCompra INT NOT NULL,
	idProduto INT NOT NULL,
	quantidade INT(5) NOT NULL,
	PRIMARY KEY(idItem),
	FOREIGN KEY(idCompra) REFERENCES compras (idCompra),
	FOREIGN KEY(idProduto) REFERENCES produtos (idProduto)
);
INSERT INTO produtos_has_compras (idCompra, idProduto, quantidade) VALUES
(1, 1, 10),
(1, 3, 1),
(1, 2, 1),
(2, 4, 2),
(2, 1, 1);

 

QUERY

SELECT
	idCompra
FROM
	produtos_has_compras
WHERE
	idProduto IN (1, 2, 3)
GROUP BY
	idCompra
;

 

Share this post


Link to post
Share on other sites

Obrigado meu caro, ms com IN não funciona porque irá trazer compras (ids) que podem ter comprado apenas um produto e não todos. Esse é o grande problema, preciso que retorne as compras que tenham todos os produtos. 

5 minutos atrás, ShadowDLL disse:

Segue exemplo:

 

SQLs a SER UTILIZADAS


CREATE TABLE produtos (
	idProduto INT NOT NULL AUTO_INCREMENT,
	nomeProduto VARCHAR(50) NOT NULL,
	PRIMARY KEY(idProduto)
);
INSERT INTO produtos (nomeProduto) VALUES
('Suco de Laranja'),
('Fita Branca'),
('Linha Branca'),
('Creme');

CREATE TABLE compras (
	idCompra INT NOT NULL AUTO_INCREMENT,
	dataCompra DATE NOT NULL,
	PRIMARY KEY(idCompra)
);
INSERT INTO compras (dataCompra) VALUES
(CURRENT_DATE),
(CURRENT_DATE);

CREATE TABLE produtos_has_compras (
	idItem INT NOT NULL AUTO_INCREMENT,
	idCompra INT NOT NULL,
	idProduto INT NOT NULL,
	quantidade INT(5) NOT NULL,
	PRIMARY KEY(idItem),
	FOREIGN KEY(idCompra) REFERENCES compras (idCompra),
	FOREIGN KEY(idProduto) REFERENCES produtos (idProduto)
);
INSERT INTO produtos_has_compras (idCompra, idProduto, quantidade) VALUES
(1, 1, 10),
(1, 3, 1),
(1, 2, 1),
(2, 4, 2),
(2, 1, 1);

 

QUERY


SELECT
	idCompra
FROM
	produtos_has_compras
WHERE
	idProduto IN (1, 2, 3)
GROUP BY
	idCompra
;

 

 

6 minutos atrás, ShadowDLL disse:

Segue exemplo:

 

SQLs a SER UTILIZADAS


CREATE TABLE produtos (
	idProduto INT NOT NULL AUTO_INCREMENT,
	nomeProduto VARCHAR(50) NOT NULL,
	PRIMARY KEY(idProduto)
);
INSERT INTO produtos (nomeProduto) VALUES
('Suco de Laranja'),
('Fita Branca'),
('Linha Branca'),
('Creme');

CREATE TABLE compras (
	idCompra INT NOT NULL AUTO_INCREMENT,
	dataCompra DATE NOT NULL,
	PRIMARY KEY(idCompra)
);
INSERT INTO compras (dataCompra) VALUES
(CURRENT_DATE),
(CURRENT_DATE);

CREATE TABLE produtos_has_compras (
	idItem INT NOT NULL AUTO_INCREMENT,
	idCompra INT NOT NULL,
	idProduto INT NOT NULL,
	quantidade INT(5) NOT NULL,
	PRIMARY KEY(idItem),
	FOREIGN KEY(idCompra) REFERENCES compras (idCompra),
	FOREIGN KEY(idProduto) REFERENCES produtos (idProduto)
);
INSERT INTO produtos_has_compras (idCompra, idProduto, quantidade) VALUES
(1, 1, 10),
(1, 3, 1),
(1, 2, 1),
(2, 4, 2),
(2, 1, 1);

 

QUERY


SELECT
	idCompra
FROM
	produtos_has_compras
WHERE
	idProduto IN (1, 2, 3)
GROUP BY
	idCompra
;

 

Obrigado meu caro, mas com IN não funciona porque irá trazer compras (ids) que podem ter comprado apenas um produto e não todos. Esse é o grande problema, preciso que retorne as compras que tenham todos os produtos. 

Share this post


Link to post
Share on other sites
as compras que tenham todos os produtos

 

Da sql acima

 

SELECT
	idCompra
FROM
	produtos_has_compras
WHERE
	idProduto IN (1, 2, 3)
GROUP BY
	idCompra
HAVING Count(distinct idProduto) = 3    
;

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By DuduBacteria
      Tenho uma Tabela chamada "VENDAS" com os seguintes atributos:
       
       
      Eu quero retornar em MySQL o total de vendas ocorridos durante 1 semana, entre o dia atual até seis dias atrás.
       
      Ficando mais ou menos assim:
       
      SEMANA              TOTAL DE VENDIDO segunda                250.00 domingo                430.00 sábado                 160.50 sexta                  300.03 quinta                 300.03 quarta                 300.03 terça                  300.03
    • By Kefatif
      Prezados, boa tarde.
       
      Estou com uma dúvida:
       
      Estou precisando trazer dados do banco para uma tela de edição de cadastro, até aí tudo bem consegui fazer para os input através do código abaixo:
       
      <label style="width:16%;margin-left: 2%;">Data de Início<br> <input type="date" value="<?php echo $row["DATA_DISPENSACAO"] ?>" class="form-control" style="width:100%;"> </label>  
      Mas o meu select já traz o controle de peso do banco, eu gostaria que além dele trazer esses pesos que traga o salvo no cadastro de uma pessoa para visualização e edição.
       
      Segue abaixo o código do select como está:
       
      <label style="width:15%">Peso<b style="color:red">*</b><br> <select name="peso" class="form-control" required style="width:100%" value="<?php echo $row["DATA_TESTE"] ?>"> <option value="">Selecione</option> <?php $sqlpeso = "select distinct PESO from TESTE where ID_ESQUEMA = ".$row["ID_ESQUEMA"]; $resultpeso = mysqli_query($con, $sqlpeso); while ($rowpeso= mysqli_fetch_array($resultpeso)){ ?> <option value="<?php echo utf8_encode($rowpeso["PESO"]);?>" ><?php echo utf8_encode($rowpeso["PESO"]); ?></option> <?php } ?> </select> </label>  
      Meu banco é MYSQL.
       
      Agradeço desde já a todos pela ajuda.
       
      Abraço!
    • By adriano.eurich
      Estou com duvida de como é montada uma query de um formulário com muitos campos em php!
      Ex. Tenho um formulário com titulo dados do cliente, nele tem vários campos para ser preenchidos, depois tem outro titulo que é dados do anuncio, que também tem vários campos a ser preenchido e mais alguns!
      Todos esses campos estão dentro de um único formulário que gostaria de enviar ao banco! Porem percebi que a query fica enorme e confusa de montar até mesmo para achar um erro!
      Acho que essa não é a melhor forma de fazer! 
      Gostaria de alguma dica ou esclarecimento de como fazer da melhor forma!
       
      Att
      Adriano
       
    • By Kefatif
      Prezados, boa tarde.
       
      Gostaria de ajuda para caso o valor no banco mysql, campo "fase" seja igual a "2" retorne uma mensagem, caso contrário siga o código
       
      Fico agradecido desde já.
       
      Abs.
    • By andreygsantos
      Pessoal, normalmente faço modelagem de banco de dados usando o CA ErWin, mas precisei utilizar a ferramenta de modelagem do MySQL Workbench 8.0 Community.
      O problema ocorre quando a ferramenta começa a "enfeitar o pavão" quando se trata de FK. Vou mostrar um exemplo básico:

      Temos aqui 3 tabelas representando condomínio, unidades e vagas. As vagas pertencem ao condomínio, assim como as unidades. As vagas podem pertencer a unidades diferentes no decorrer do tempo porque não são vagas fixas, portanto não posso pendurar vaga na unidade.
      Problema 1: FK recebe o nome da tabela origem automaticamente.
      Até aqui posso renomear o atributo ou alterar as configurações de modelagem.
       

      Atributos renomeados, temos o seguinte modelo representado acima. Agora vamos levar a PK da entidade UNIDADE para ser FK não identificação na entidade VAGA.
       

      E agora temos o Problema 2: a ferramenta não entende que o atributo CondomínioID já existe e cria novamente com o prefixo da entidade origem. Parece um problema besta e fácil de resolver apagando o atributo duplicado e mantendo apenas UnidadeID, mas ao sincronizar com o banco de dados, começam a surgir erros com índices.
      Abaixo mostro como fica a modelagem no ERWin sem qualquer interferência:
       

      Como podem ver, a modelagem fica perfeita. O ErWin entende que o atributo já existe na entidade e leva apenas o atributo que vai diferenciar para fazer o relacionamento.
       
      Vocês devem estar se perguntando por que eu não uso o ErWin então... Mas a versão do ErWin que tenho não suporta MySQL após a versão 5.x e uma licença nova dessa ferramenta vai me custar 1 rim, senão os 2... Teoricamente, o Workbench deveria fazer essa modelagem sem problemas, mas eu não conheço bem e talvez possa ser alguma configuração. Alguém teria uma luz?
      Obrigado.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.