Ir para conteúdo
Fórum Script Brasil
  • 0

Adriana Araujo

Pergunta

Olá pessoal,
Preciso de uma luz.
Preciso fazer um select de comparação de preço, dentro das seguintes condições:
1) O usuário compõe uma lista de itens, vários itens.
2) O sistema fará uma comparação do valor total desta lista com menor valor.
3) o que tem que aparecer para o usuário é o nome do fornecedor e total com menor valor da lista.
As tabelas são as seguintes:
tb_lista_itens: É onde gravar a lista composta pelo o usuário.
Campos da tabela: "id_lista_produto" "id_lista" "id_produto" "quantidade"
tb_produtos_empresa: É onde está listados, os produtos, o id da empresa e os respectivos preços dos produtos.
Campos da tabela: "id_produto_mercado" "id_empresa" "id_produto" "produto_emp_preco" "data_atualizado"
tb_empresa: É onde está as informações do fornecedor, nome, endereço etc.
Campos da tabela: "id_empresa" "empresa_nome" "cnpj" "insc_est" "responsavel_nome" "responsavel_email" "empresa_telefone" "endereco" "numero" "complemento" "cep" "bairro" "cidade" "longitude" "latitude" "status"
Então ficaria da seguinte forma:
-----------------------------
Fornecerdor - Total da lista
-----------------------------
Extra - 50,00
-----------------------------
Fiz o seguinte select:
SELECT
tb_empresa.empresa_nome,
sum(tb_produtos_empresa.produto_emp_preco)
FROM
tb_produtos_empresa
INNER JOIN tb_lista_itens ON tb_produtos_empresa.id_produto = tb_lista_itens.id_produto
INNER JOIN tb_empresa ON tb_produtos_empresa.id_empresa = tb_empresa.id_empresa
WHERE (select MIN(tb_produtos_empresa.produto_emp_preco) from
tb_produtos_empresa
INNER JOIN tb_lista_itens ON tb_produtos_empresa.id_produto = tb_lista_itens.id_produto )
Porém, esse select só está trazendo o nome do primeiro fornecedor e o total de todos os itens de todo mundo!
É isso, não tenho o conhecimento para complementar o que está faltando.
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Quando eu seleciono elementos da tabela abaixo

tb_lista_itens: É onde gravar a lista composta pelo o usuário.

Campos da tabela: "id_lista_produto" "id_lista" "id_produto" "quantidade"

Com quais atributos eu identifico a empresa e o produto para relacionar com a tabela abaixo?

tb_produtos_empresa: É onde está listados, os produtos, o id da empresa e os respectivos preços dos produtos.

Campos da tabela: "id_produto_mercado" "id_empresa" "id_produto" "produto_emp_preco" "data_atualizado"

Sem esta conexão é impossível saber qual empresa possui o menor total de preço.
Link para o comentário
Compartilhar em outros sites

  • 0

Quando eu seleciono elementos da tabela abaixo

tb_lista_itens: É onde gravar a lista composta pelo o usuário.

Campos da tabela: "id_lista_produto" "id_lista" "id_produto" "quantidade"

Com quais atributos eu identifico a empresa e o produto para relacionar com a tabela abaixo?

tb_produtos_empresa: É onde está listados, os produtos, o id da empresa e os respectivos preços dos produtos.

Campos da tabela: "id_produto_mercado" "id_empresa" "id_produto" "produto_emp_preco" "data_atualizado"

Sem esta conexão é impossível saber qual empresa possui o menor total de preço.

Olá Denis!

Muito obrigada pela atenção!

Realmente, não existe tal atributo. Exceto o Id_produto, por isso tentei uni-los pelo inner join, por que a tabela tb_lista_itens foi feita com a intenção de armazenar apenas os itens do usuário, colocando um atributo para identificar a empresa não duplicaria ,talvez, na tela os itens de produtos para o usuário?

Nossa realmente fiquei confusa rsrsrs..

Obrigada!

Editado por Adriana Araujo
Link para o comentário
Compartilhar em outros sites

  • 0

Ok. Entendi.

1) O select abaixo separará os produtos de uma lista

select id_produto, quantidade from tb_lista_itens where id_lista = ??
2) O select abaixo separará e somará os preços dos produtos por fornecedor

select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotalitem
from tb_produtos_empresa pe
inner join tb_lista_itens li on li.id_produto = pe.id_produto
where id_lista = ??
group by pe.id_empresa, pe.id_produto
3)Como você só precisa dos totais de cada empresa, pode retirar o pe.id_produto do order by. Ficando assim:

select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotalitem
from tb_produtos_empresa pe
inner join tb_lista_itens li on li.id_produto = pe.id_produto
where id_lista = ??
group by pe.id_empresa
4) Agora vamos ao que interessa. Saber quem é o menor valor

select mv.id_empresa, e.empresa_nome, min(mv.vltotaempresa) as menor valor
from tb_empresa e
INNER JOIN (select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotaempresa
      from tb_produtos_empresa pe
      inner join tb_lista_itens li on li.id_produto = pe.id_produto
      where id_lista = ??
      group by pe.id_empresa) mv on mv.id_empresa = e.id_empresa
Por favor teste tudo pois fiz sem testar nada.
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...