Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Carregando comentários...