Jump to content

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 Agnosticado
      Olá senhores, estou intrigado com uma coisa: tenho o seguinte código:
      $id_exame = "50296"; $pesquisa = "SELECT motivo, CASE WHEN motivo = 'Intensa superposição celular em mais de 75% de esfregaço' THEN 'A' WHEN motivo = 'Sangue em mais de 75% de esfregaço' THEN 'B' WHEN motivo = 'Artefatos de dessecamento mais de 75% de esfregaço' THEN 'C' ELSE 'TESTE' END AS opcao FROM insatisfatorio WHERE exame_id = '$id_exame' ORDER BY opcao ASC"; $linha = mysql_query($pesquisa); while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){ echo $pesquisa["opcao"]; } Quando executo usando
       
      $linha = mysql_query($pesquisa);
                 while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){
              echo $pesquisa["opcao"];
              echo "<br>";
       
       
      a saída é palavra "TESTE" que o default e não o texto "B" que corresponde a string da chamada do $id_exame = 50296.
       
      O ESQUISITO é que quando executo todo select que está na variável $pesquisa direto no SGBD dá certo e o texto "B" aparece normalmente.
      PQ DIABOS ISSO ACONTECE???
    • By Gemenson Miranda
      Oi pessoal, estou com um problema na minha hospedagem LInux do Godaddy, publiquei meu site, fiz o apontamento correto do banco de dados, mas quando acesso a URL o site me exibe HTTP ERROR 500 exibe realizei a configuração do arquivo .htaccess, alterei as permissões para (755), nada disso resolve... A questão e que sempre que comento as informações de apontamento do banco de dados no arquivo index.php o site carrega normalmente, porem sem conexão com o bando mysql, o que me faz pensar que o erro pode esta relacionado ao banco mysql, porem não consigo visualizar o erro por que a tela fica toda branca e não retorna nada, como resolver esse erro ou ao menos exibir qual erro causa ele?? agradeço!
    • By maruoppolo
      Olá, tenho 2 tabelas:
       
      tb_dados: ID - MUSICA
       
      tb_votos: ID - VOTO - RADIO - MUSICA
       
      Preciso fazer uma query que traga as musicas da tb_dados porém ordenando pelo número de votos que ela teve na tb_votos.
       
      Então assim, existem 2 tipos de voto 1 = like e 2 = dislike, cada ver que um usuário vota eu pego qual radio que ele esta ouvindo e salvo no campo radio, o id da musica na tb_dados e salvo no campo musica da tb_votos e coloco o número 1 para like e 2 para dislike no campo voto.
       
      A query precisa contar quantos likes teve na tv_votos filtrando por radio e mostrando os resultados em ordem decrescente as musicas com mais likes.
       
      A ideia é trazer as 10 musicas com mais like de cada radio
       
      Alguma ideia de como fazer?? Estou enroscado nisso a dias.
    • By Chester1
      oi, eu to tentando mexer com servidores agora no PHP e esta dando um erro muito estranho que quando eu procuro em um programa que acha erros de sintaxe ele me diz que o erro esta no </HTML>    se alguem puder me dizer qual foi o erro que eu cometi eu agradeceria
       

       
      <HTML> <HEAD><TITLE>incluindo no banco de dados</TITLE></HEAD> <body> <BODY bgcolor="#d0d0d0"> <center> <h3>Lanchonete coma bem (voltada para o internauta)</h3> <h1>24horas</h1> <?php $login_digitado=$_POST['login']; $senha=$_POST['senha']; $nome=$_POST['nome']; $email=$_POST['email']; $telefone=$_POST['telefone']; $celular=$_POST['celular']; $endereco=$_POST['endereco']; $complemento=$_POST['complemento']; if ($login_digitado == "" || $senha == "" || $nome =="" || $email == "" || $telefone == "" || $endereco == "" || $complemento == "") { echo "existem(m) campos(s) de preenchimento obrigatorio em branco,<BR> infelizmente tera que voltar para preenche-lo(s)."; echo "<BR><a href=\"cadastro.php\">clique aqui para tentar novamente</a>"; } else { { $link=mysql_connect("localhost", "root", "") or die ("<h1>nao foi possivel conectar !!!</h1> ".mysql_error());  
      obs :estou trabalhando com formularios e servidores
         
         
         
         
      ?>
      </BODY>
      </HTML>
    • By rainbowily
      Sou nova em sql e estou com duvida em como fazer uma consulta:
      Eu tenho uma tabela de produto(id, descricao), cor(id, nome) e produto_cor(id, id_produto, id_cor). Preciso descobrir se tem algum produto que tenhas as cores (1,2,3) respectivamente para não deixar cadastrar outro produto. Alguém poderia me ajudar? Obrigada



×

Important Information

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