I need to create query like (i’m using PostgreSQL):
(SELECT * FROM t1 WHERE a>b ORDER BY a DESC)
UNION ALL
(SELECT * FROM t1 WHERE a<b ORDER BY a DESC)
So, I’m trying to use query builder
$query1 = DB::select('*')
->from('t1')->where('a', '>', 'b')->order_by('a', 'desc');
$query2 = DB::select('*')
->from('t1')->where('a', '<', 'b')->order_by('a', 'desc');
$result = $query1->union($query2, TRUE);
But in result i have sql query where selects without brackets. Like this:
SELECT * FROM t1 WHERE a>b ORDER BY a DESC
UNION ALL
SELECT * FROM t1 WHERE a<b ORDER BY a DESC
And get SQL syntax error… Sorry for my english
Why not
SELECT * FROM t1 WHERE a != b ORDER BY a DESC?EDIT
For more complex query, when you really need two or more ORDER BY, I can see only this solution: