Итак, у меня две таблицы, одна - A (order_id, order_group_id, name), а вторая - B (order_group_id, paid).
Таблица A содержит несколько записей:
order_id | order_group_id | name
----------------------------------
1 | 0 | A
----------------------------------
2 | 14 | B
----------------------------------
3 | 0 | C
----------------------------------
4 | 15 | D
Таблица B имеет несколько записей:
order_group_id | paid
--------------------------
14 | 0
--------------------------
15 | 1
Теперь я запускаю эти два запроса:
SELECT order_id FROM A WHERE order_group_id = 0
а также
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0
Первый запрос дает order_id
1
и 3
.
Второй запрос дает order_id
2
.
Итак, теперь, как получить результат обоих этих запросов в одном, также этот order_id
должен быть в порядке возрастания.
Я буду очень благодарен вам, пожалуйста.
Вы можете достичь этого, используя LEFT JOIN
В этом запросе будут возвращены все записи, которые либо paid is 0
либо paid is 0
либо order_group_id is 0
SELECT order_id, e.paid, d.order_group_id FROM A as d
LEFT JOIN B as e ON d.order_group_id = e.order_group_id
WHERE e.paid = 0 OR d.order_group_id = 0
В codeignitor
вы можете добиться следующего
$query = $this->select('SELECT order_id, e.paid, d.order_group_id')->from('A as d')->join('B as e','d.order_group_id = e.order_group_id','LEFT')->where('e.paid = 0 OR d.order_group_id = 0')->get();
SELECT order_id FROM A WHERE order_group_id = 0
union
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0
Вы можете связать две или более таблицы, используя INNER JOIN. И используйте ORDER BY (столбец) ASC/DESC, чтобы сделать восходящий или нисходящий порядок
SELECT order_id FROM A as d INNER JOIN B as e
ON d.order_group_id = e.order_group_id
WHERE d.order_group_id = 0 AND e.paid = 0
ORDER BY order_id ASC
order_id
равен 0, или все заказы, гдеpaid
0?