Хочу достать из БД несколько таблиц, связанных между собой, через INNER JOIN не получается, как сделать?
Есть 4 таблицы: orders, users, booster_info, reviews
1) Из первой таблицы orders нужны все колонки
2) Из второй таблицы users нужна колонка username
3) Из третьей таблицы booster_info нужна колонка earned
4) Из четвертой таблицы reviews нужна колонка id
1) Записей должно получится столько, сколько есть записей в orders с фильтром WHERE order_status = '5'
2) В users есть колонка id, которая совпадает с колонкой booster_id в orders
3) В booster_info есть колонка booster_id, которая совпадает с колонкой booster_id в orders
4) В reviews есть колонка order_id, которая совпадает с колонкой order_id в orders
При этом записей в таблице reviews может и не быть (нужно просто знать, есть ли запись по нужному order или нет)
Запросы, которые я смог составить:
SELECT o.*, b.earned AS booster_earned, u.username AS booster_name FROM orders AS o INNER JOIN booster_info AS b ON o.booster_id = b.booster_id INNER JOIN users AS u ON o.booster_id = u.id WHERE o.order_status='5'
Первый запрос работает как надо, но когда я добавляю к нему таблицу reviews (она пустая, второй запрос), перестает выдавать результаты, собственно вопрос, как сделать, чтобы все равно извлекались записи как в первом запросе, но с пустым значением в r.id AS review_id (с пустым конечно, если нету соотв. записей)
SELECT o.*, b.earned AS booster_earned, u.username AS booster_name, r.id AS review_id FROM orders AS o INNER JOIN booster_info AS b ON o.booster_id = b.booster_id INNER JOIN users AS u ON o.booster_id = u.id INNER JOIN reviews AS r ON o.order_id = r.order_id WHERE o.order_status='5'
в вашем случае надо использовать не внутреннее соединение INNER JOIN, а внешнее LEFT JOIN ваша_табличка_возможно _пустая. получится:
SELECT o.*, b.earned AS booster_earned, u.username AS booster_name, r.id AS review_id
FROM orders AS o
INNER JOIN booster_info AS b ON o.booster_id = b.booster_id
INNER JOIN users AS u ON o.booster_id = u.id
LEFT JOIN reviews AS r ON o.order_id = r.order_id
WHERE o.order_status='5'