gremio10 14 Denunciar post Postado Janeiro 6, 2011 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
Go Back 0 Denunciar post Postado Janeiro 6, 2011 Pq você nao separa os Selects ? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Janeiro 6, 2011 Mas pra que ? vai ficar a mesma coisa no final, ele funcionava até quando era apenas dois ORDERS mas com tres ta dificil, Vlw pela ajuda Go Back... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 6, 2011 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
Go Back 0 Denunciar post Postado Janeiro 6, 2011 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
gremio10 14 Denunciar post Postado Janeiro 6, 2011 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
Motta 645 Denunciar post Postado Janeiro 6, 2011 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
gremio10 14 Denunciar post Postado Janeiro 6, 2011 Gênio Motta ... só isso que digo ... Muito Obrigado .. Compartilhar este post Link para o post Compartilhar em outros sites