Quantcast
Channel: Últimos conteúdos
Viewing all articles
Browse latest Browse all 14190

Ordenar busca por valor

$
0
0

Boa tarde, segue meu problema pessoal...

 

Possuo 3 tabelas no banco de dados

 

tabela: produtos

tabela: produtos_atributos

tabela: produtos_cores

 

Na hora de inserir um novo produto no banco de dados eu tenho as seguintes opções:

 

1- inserir um produto único

2- Inserir um produto com cores diferentes

3- Inserir um produto com atributos(tamanhos) diferentes

4- Inserir um produto com atributos(tamanhos) diferentes e cores diferentes

 

resumindo

 

digamos que eu tenha:

 

1 produto único inserido (1x1) = 1 produto

1 produto com 2 cores inseridos (1x2) = 2 produtos

1 produto com 2 atributos(tamanhos) inseridos (1x2) = 2 produtos

1 produto com 2 atributos(tamanhos) e em cada tamanho eu tenho 2 cores inseridas (1x2x2) = 4 produtos

 

no total eu tenho 4 produtos que geram ao todo 9 variações do produto.

 

até este ponto tudo bem, fiz a busca no banco de dados e ela me retornou perfeitamente, o problema acontece quando quero ordenar está busca pelo valor, e este problema vou explicar logo abaixo:

 

na tabela produtos eu tenho o campo valor e o campo valor_promocao 

na tabela produtos_atributos eu tenho novamente o campo valor (pois cada atributo por ter um valor diferente)

na tabela produtos_cores eu tenho novamente o campo valor (pois cada cor por ter um valor diferente)

 

então quando eu faço a busca ela me retorna 4 campos de valor

 

valor da tabela produto

valor_promocao da tabela produto

valor da tabela produtos_atributos
valor da tabela produtos_cores

 

Como são campos diferentes eu não consigo ordenar corretamente quando tento ordenar do menor para o maior etc...

 

segue agora a query que estou usando para realizar a busca

 

se alguém puder apontar o caminho certo para que eu consiga executar corretamente  eu agradeço desde já!

SELECT 

p.ID, p.NOME, p.VALOR, p.VALOR_PROMOCAO,

pc.ID AS IDPC, pc.NOME AS NOMEPC, pc.VALOR AS VALORPC,

pa.ID AS IDPA, pa.ATRIBUTO, pa.VALOR AS VALORPA,

pc2.ID AS IDPC2, pc2.NOME AS NOMEPC2, pc2.VALOR AS VALORPC2

FROM 

empresas e, loja_virtual lv, produtos p

LEFT JOIN produtos_cores pc ON pc.IDPRODUTO = p.ID

LEFT JOIN produtos_atributos pa ON pa.IDPRODUTO = p.ID

LEFT JOIN produtos_cores pc2 ON pc2.IDATRIBUTO = pa.ID

WHERE 

e.ID = 3 AND 

e.ID = lv.IDEMPRESA AND 

p.IDLOJA_VIRTUAL = lv.ID AND 

p.STATUS <> 2 AND

p.ID = pa.IDPRODUTO AND

pa.ID = pc2.IDATRIBUTO		

OR

e.ID = 3 AND 

e.ID = lv.IDEMPRESA AND 

p.IDLOJA_VIRTUAL = lv.ID AND 

p.STATUS <> 2 AND

p.ID = pc.IDPRODUTO AND 
           
NOT EXISTS (SELECT null FROM produtos_atributos pa WHERE pa.IDPRODUTO = p.ID)

OR

e.ID = 3 AND 

e.ID = lv.IDEMPRESA AND 

p.IDLOJA_VIRTUAL = lv.ID AND 

p.STATUS <> 2 AND

p.ID = pa.IDPRODUTO AND

NOT EXISTS (SELECT null FROM produtos_cores pc2 WHERE pc2.IDATRIBUTO = pa.ID)

OR

e.ID = 3 AND 

e.ID = lv.IDEMPRESA AND 

p.IDLOJA_VIRTUAL = lv.ID AND 

p.STATUS <> 2 AND 

NOT EXISTS (SELECT null FROM produtos_atributos pa WHERE pa.IDPRODUTO = p.ID) AND

NOT EXISTS (SELECT null FROM produtos_cores pc WHERE pc.IDPRODUTO = p.ID)            

ORDER BY pc2.VALOR, pc.VALOR, pa.VALOR, p.VALOR ASC

LIMIT 12

Viewing all articles
Browse latest Browse all 14190