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 gersonab
      Bom dia, tenho um select onde gostaria de ordenar o mesmo pelo dia do campo date , segue o mesmo 
      $mesatual = date("m"); $consulta = $pdo->query("SELECT * FROM cli WHERE MONTH(datan) = '$mesatual' ORDER BY DAY(datan) ASC"); não esta ordenando o mesmo, teria de ser pelo dia, pois o mês vai ser sempre o atual e o ano varia conforme data de nascimento.
       
      exemplo de como esta aparecendo :
      18/07/2019
      14/07/2019
      preciso que seja assim :
      14/07/2019
      18/07/2019
    • By Igor Gabriel
      Boa Tarde, estou com uma dúvida.
       
      Estou criando um site para uma imobiliárias, fiz um sistema de cadastro todo bonitinho onde se encontra funcionando perfeitamente. Contudo fora do sistema, no site, quando clico para ver os imoveis, tenho a listagem de todos os imoveis já cadastrados. Quando entro na página para ver mais do Imóvel é trazido consigo todas as informações presentes no banco, ao invés de uma só. Como faço para trazer uma única informação específica do banco?
    • By leocouto
      Pegar um dado específico de uma tabela, caso tenha mais de um item cadastrado sempre vai pegar o último.
      <form name="editaFornecedor"<?php +1?> action="edit_forne.php" id="editaFornecedor" method="POST"> <!-- Pegando todos os fornecedores cadastrados... --> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th scope="col">ID</th> <th scope="col">Nome</th> <th scope="col">Fone</th> <th scope="col">CNPJ</th> <th scope="col">Rua</th> <th scope="col">Número</th> <th scope="col">Bairro</th> <th scope="col">Estado</th> <th scope="col">Cidade</th> <th scope="col">CEP</th> <th scope="col">E-mail</th> <th scope="col">Observação</th> <th scope="col">Editar|Deletar</th> </tr> </thead> <?php @session_start(); include('conexao.php'); $fornecedor = mysqli_query($conexao, "SELECT * FROM fornecedor"); $linhas = mysqli_num_rows($fornecedor); while ($linhas = mysqli_fetch_array($fornecedor)) { ?> <tbody> <tr> <td><?php echo $linhas['id_fornecedor']; ?></td> <td><?php echo $linhas['nome']; ?></td> <td><?php echo $linhas['fone']; ?></td> <td><?php echo $linhas['cnpj']; ?></td> <td><?php echo $linhas['rua']; ?></td> <td><?php echo $linhas['numero']; ?></td> <td><?php echo $linhas['bairro']; ?></td> <td><?php echo $linhas['estado']; ?></td> <td><?php echo $linhas['cidade']; ?></td> <td><?php echo $linhas['cep']; ?></td> <td><?php echo $linhas['email']; ?></td> <td><?php echo $linhas['observacao']; ?></td> <td> <button type="submit" class="btn btn-secondary" style="height: 35px; width: 100px"><i class="material-icons">description</i>Editar</button><br> <button type="button" class="btn btn-danger" style="height: 35px; width: 100px"><i class="material-icons">delete</i>Deletar</button> </td> <td><input type="text" name="id_fornecedor" value="<?php echo $linhas['id_fornecedor'];?>"></td> </tr> </tbody> <?php } ?> </table> <!-- Fim da exibição de todos os fornecedores cadastrados.. --> </form>  
       
      ======================================================================================================================================================
      Aqui no MYSQL só pega o último item da tabela.. Não pega o que foi clicado no botão.
      <?php include('conexao.php'); session_start(); //$cnpj=$_POST['cnpj']; $id_fornecedor=$_POST['id_fornecedor']; echo $id_fornecedor; ?> =======================================================================================================================================================
      É desse modelo da imagem, mas na hora que clico em editar no mysql aparece o último id e não na linha que cliquei, se eu clicar no primeiro na outra página aparece o id 4, que é o ultimo, quem pode me dar essa força? Ficarei muito grato.

    • By Felipe_N22
      Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
    • By xuxutrader
      Fala pessoal, sou novato na área.
      To fazendo um site em wordpress que irá pegar as cotações de ações de um banco de dados (já possuo o banco de dados). Gostaria de saber como que eu faço pra colocar o resultado (o banco de dados) na página do wordpress.
       
      No caso eu gostariia de mostrar o resultado (não é nem uma query, é a tabela mesmo) numa página do meu site.
       
      Obrigado por quem puder me ajudar
×

Important Information

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