2

I am having trouble executing this sql. I need to get the result and send it via JSON to my web page.

SELECT `produto`.`nome` `nome`, `estoque_movimento`.`data`, `estoque_movimento`.`qtd`, `estoque_movimento`.`motivo`, `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
FROM `estoque_movimento` 
LEFT JOIN `produto` ON `produto`.`id` = `estoque_movimento`.`produto_id` 
LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
WHERE `estoque_movimento`.`data` >= '2018-03-26 00:00:00' 
AND `estoque_movimento`.`data` <= '2018-10-03 23:59:59' 
ORDER BY `estoque_movimento`.`data` DESC 

UNION 

SELECT `produto`.`nome` `nome`, `pedido_produto`.`criado_em`, `pedido_produto`.`qtde`, CONCAT("Alocado no pedido n°: ", pedido_produto.produto_id), `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
FROM `pedido_produto` 
LEFT JOIN `pedido` ON `pedido`.`id` = `pedido_produto`.`pedido_id` 
LEFT JOIN `produto` ON `produto`.`id` = `pedido_produto`.`produto_id` 
LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
WHERE `pedido`.`is_finalizado` = 0 
GROUP BY `produto`.`nome`, `pedido_produto`.`produto_id`

I am getting this error:

#1221 - Incorrect usage of UNION and ORDER BY
Edi
  • 615
  • 5
  • 15
  • Remove `order by` from top query. Or if you need it then wrap top query in `Select`. Like `SELECT produto... FROM (SELECT produto. nome nome, ...ORDER BY estoque_movimento.data DESC )` – Mahesh Oct 04 '18 at 01:40
  • 2
    Possible duplicate of [How to order by with union](https://stackoverflow.com/questions/4715820/how-to-order-by-with-union) – Mahesh Oct 04 '18 at 01:41
  • Coder of code, Madhur Bhaiya answer solved my problem. Thank you, – Edi Oct 04 '18 at 20:29

1 Answers1

1

Use parantheses ( ) around different Select query groups.

Try:

(
 SELECT `produto`.`nome` `nome`, `estoque_movimento`.`data`, `estoque_movimento`.`qtd`, `estoque_movimento`.`motivo`, `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
 FROM `estoque_movimento` 
 LEFT JOIN `produto` ON `produto`.`id` = `estoque_movimento`.`produto_id` 
 LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
 LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
 WHERE `estoque_movimento`.`data` >= '2018-03-26 00:00:00' 
 AND `estoque_movimento`.`data` <= '2018-10-03 23:59:59' 
 ORDER BY `estoque_movimento`.`data` DESC 
)

UNION 

(
 SELECT `produto`.`nome` `nome`, `pedido_produto`.`criado_em`, `pedido_produto`.`qtde`, CONCAT("Alocado no pedido n°: ", pedido_produto.produto_id), `marca`.`nome` `marca`, `tipo_produto`.`nome` `categoria` 
 FROM `pedido_produto` 
 LEFT JOIN `pedido` ON `pedido`.`id` = `pedido_produto`.`pedido_id` 
 LEFT JOIN `produto` ON `produto`.`id` = `pedido_produto`.`produto_id` 
 LEFT JOIN `tipo_produto` ON `tipo_produto`.`id` = `produto`.`tipo_id` 
 LEFT JOIN `marca` ON `marca`.`id` = `produto`.`marca_id` 
 WHERE `pedido`.`is_finalizado` = 0 
 GROUP BY `produto`.`nome`, `pedido_produto`.`produto_id`
)
Madhur Bhaiya
  • 28,155
  • 10
  • 49
  • 57