А в момент, когда я использую два запроса, один вызывается изначально, а второй вызывается во время цикла по результатам первого.Я хочу объединить оба запроса, но пока не смог.Таблицы, из которых извлекаются запросы:
+--------------+ +--------------+ +--------------------------+
| table_1 | | table_2 | | table_3 |
+----+---------+ +----+---------+ +----+----------+----------+
| id | name | | id | name | | id | tbl1_id | tbl2_id |
+----+---------+ +----+---------+ +----+----------+----------+
| 1 | tbl1_1 | | 1 | tbl2_1 | | id | 1 | 1 |
| 2 | tbl1_2 | | 2 | tbl2_2 | | id | 3 | 2 |
| 3 | tbl1_3 | | 3 | tbl2_3 | | id | 3 | 3 |
| 4 | tbl1_4 | +----+---------+ +----+----------+----------+
+----+---------+
Между table_1
и table_2
в table_3
существует отношение многие ко многим.До сих пор я использовал для разделения запросов.Один запрос возвращает все содержимое table_1
, а второй запрос возвращает значения table_2
, которые связаны с table_1
через table_3
.Тем не менее, я хотел бы покончить с циклом и уменьшить количество запросов, отправляемых на сервер.Я попытался использовать JOIN
:
SELECT table_1.id, table_1.name, table_2.id, table_2.name
FROM table_3
LEFT JOIN table_1 ON (table_3.tbl1_id = table_1.id)
LEFT JOIN table_1 ON (table_2.tbl2_id = table_2.id)
Это вернуло очень много желаемого, за исключением того, что оно вернуло только те значения, которые были в table_3
, исключая некоторые значения из table_1
.Я пытался использовать подзапросы:
SELECT table_1.id,
table_1.name,
(SELECT table_2.id FROM table_2, table_3 WHERE table_2.id = table_3.tbl2_id AND table_1.id = table_3.tbl1_id) AS tbl_2_id,
(SELECT table_2.name FROM table_2, table_3 WHERE table_2.id = table_3.tbl2_id AND table_1.id = table_3.tbl1_id) AS tbl_2_name
FROM table_1
Это дало ERROR 1242
.До сих пор я не смог заставить что-либо работать.Результат, который я ищу, похож на этот.
+---------------+---------------+---------------+---------------+
|table_1.id |table_1.name |table_2.id |table_2.name |
+---------------+---------------+---------------+---------------+
| 1 | tbl1_1 | 1 | tbl2_1 |
| 2 | tbl1_2 | | |
| 3 | tbl1_3 | 2 | tbl2_2 |
| 3 | tbl1_3 | 3 | tbl2_3 |
| 4 | tbl1_4 | | |
+---------------+---------------+---------------+---------------+
Кроме того, я хотел бы иметь возможность упорядочить результаты как по table_1.name
, так и по table_2.name
.Если у кого-нибудь есть предложение, пожалуйста, дайте мне знать.