php – Uso NOT EXISTS em 2 subquerys

Question:

I tried to use NOT EXISTS , but it is bringing the results that do not exist in the tb_pedidoproduto table, I believe that the LIMIT is not working:

SELECT produto.idproduto
      ,produto.nomeproduto
      ,produto.idcategoria
      ,produto.imagem
      ,produto.qtdmedida
      ,produto.valorproduto
      ,produto.idunidademedida
      ,produto.descricaoproduto
  FROM tb_produto AS produto
 WHERE produto.idcategoria = '2'
   AND NOT EXISTS ( SELECT pedidoproduto.idproduto
                           ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                     WHERE produto.idcategoria = '2'
                       AND produto.idproduto = pedidoproduto.idproduto
                     GROUP BY pedidoproduto.idproduto
                     ORDER BY qtdprodutopedido DESC LIMIT 6)
 ORDER BY produto.idproduto ASC

Basically what I need is to subtract the results of the first SELECT with those of the second, I tried to make a SELECT using the - operand, but it didn't work either.

PS: I asked a question already about this, but the answers didn't help, and apparently if I edit the question no one will answer, so I asked another one.

Answer:

I believe your problem is in your sub select. You need to relate your table tb_pedidoproduto with tb_produto this within the sub select and only then check if the ids are the same AND ProdutoSub.idproduto = produto.idproduto in both tables. See how it looks.

SELECT produto.idproduto
      ,produto.nomeproduto
      ,produto.idcategoria
      ,produto.imagem
      ,produto.qtdmedida
      ,produto.valorproduto
      ,produto.idunidademedida
      ,produto.descricaoproduto
 FROM tb_produto AS produto
 WHERE produto.idcategoria = '2'

   AND NOT EXISTS ( SELECT pedidoproduto.idproduto ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                      join tb_produto AS ProdutoSub on ProdutoSub.idproduto = pedidoproduto.idproduto
                      WHERE ProdutoSub.idcategoria = '2'
                      AND ProdutoSub.idproduto = produto.idproduto
                      GROUP BY pedidoproduto.idproduto
                      ORDER BY qtdprodutopedido 
                      DESC LIMIT 6)

 ORDER BY produto.idproduto ASC

Make sure your sub select is returning the 6 you don't want.

SELECT pedidoproduto.idproduto ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                      join tb_produto AS ProdutoSub on ProdutoSub.idproduto = pedidoproduto.idproduto
                      WHERE ProdutoSub.idcategoria = '2'
                      --AND ProdutoSub.idproduto = produto.idproduto
                      GROUP BY pedidoproduto.idproduto
                      ORDER BY qtdprodutopedido 
                      DESC LIMIT 6
Scroll to Top
AllEscort