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