Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gremio10

[Resolvido] Ordenar 3 campos

Recommended Posts

Fala galera, tenho um probleminha.

 

Tenho o campo budget que é 0 ou 1 , ou seja, se for verdadeiro é 1 senão é 0.

Também tenho o campo norder , que é a ordem dos produtos e o campo has_stock, que é 0 ou 1 tbm.

 

o que tenho de fazer é o seguinte.

 

quando o estoque estiver em 0 ele fica por ultimo, caso o budget estiver em 1 ficar por ultimo tbm, mas depois do estoque, e mesmo assim ordernar os produtos.

 

fiz um SQL mas ele coloca o budget primeiro que o has_stock:

 

SELECT 	
    p.budget,
    p.has_stock,
    sp.*,
    p.name
FROM 	shop_product sp,
product p,
       category_product cp
WHERE 	sp.product_id = p.id
AND   	p.is_active = "1"
AND   	p.id = cp.product_id
AND   	cp.category_id IN ("67")
ORDER 	BY p.has_stock DESC,p.budget ASC,cp.norder ASC

 

Obigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente o ORDER BY com CASE, aí você pode montar uma regra.

 

Confesso não ter entendido bem a regra.

 

... quando o estoque estiver em 0 ele fica por ultimo, caso o budget estiver em 1 ficar por ultimo tbm, mas depois do estoque, e mesmo assim ordernar os produtos. ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem a base de dados local para teste é dificil te ajudar...

A tabela produto tem o campo category_id né ??

Eu tentei imagina suas estruturas, veja se dá certo isso e veja se você entendeu o que eu postei.

 

SELECT
P.BUDGET,
P.HAS_STOCK,
*
P.NAME
FROM
SHOP_PRODUCT SP
INNER JOIN 
PRODUCT P ON P.ID = SP.PRODUCT_ID
INNER JOIN 
CATEGORY_PRODUCT CP ON CP.CATEGORY_ID = P.CATEGORY_ID
WHERE
CP.CATEGORY_ID IN (67)
AND
SP.PRODUCT.ID IN (SELECT ID FROM PRODUCT ORDER BY HAS_STOCK DESC)
ORDER BY 
P.BUDGET
ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente o ORDER BY com CASE, aí você pode montar uma regra.

 

Confesso não ter entendido bem a regra.

 

... quando o estoque estiver em 0 ele fica por ultimo, caso o budget estiver em 1 ficar por ultimo tbm, mas depois do estoque, e mesmo assim ordernar os produtos. ...

 

Motta ... usando o CASE eu apenas dou nomes, certo ? quero fazer assim.

 

Um produto quando se cadastra no sistema é assim:

 

has_tock budget norder

1 0 1

 

Ou seja, possui estoque, nao esta em orçamento e a ordem dele é 1.

mas quando ele não está em estoque fica:

 

has_tock budget norder

0 0 1

 

entao , ele deve ficar abaixo dos que tem no has_tock = 1, mas quando temos um produto que é orçamento ...

 

has_tock budget norder

0 1 1

 

esse produto deve ficar abaixo dos produtos que tem estoque mas acima dos que nao tem estoque.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enrolado, mas creio que seria algo assim.

 

...
order by (case when (has_stock=1 and budget=0) then 1 
              when (has_stock=0 and budget=1) then 2
              else 3 end) ASC,cp.norder ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.