Привет,
У меня очень сложная проблема с функцией group_concat , и я несколько дней безуспешно думаю, как ее решить.
Есть 3 таблицы:
tasks task_tag tag
+---------+----------+ +---------+----------+ +---------+----------+
| task_id | data | | task_id | tag_id | | tag_id | name |
+---------+----------+ +---------+----------+ +---------+----------+
| 1 | task 1 | | 1 | 5 | | 5 | work |
| 2 | task 2 | | 1 | 7 | | 6 | school |
| 3 | task 3 | | 2 | 6 | | 7 | home |
+---------+----------+ +---------+----------+ +---------+----------+
Когда необходимо получить все задачи со всеми тегами, с которыми они связаны в столбце результата, проблем со следующим запросом не возникает:
SELECT t.task_id, t.data, GROUP_CONCAT(tg.name) AS tags
FROM tasks t
LEFT JOIN task_tag tt ON tt.task_id = t.task_id
LEFT JOIN tag tg ON tg.tag_id = tt.tag_id
GROUP BY t.task_id
result
+---------+-----------+-------------+
| task_id | data | tags |
+---------+-----------+-------------+
| 1 | task 1 | work,home |
| 2 | task 2 | school |
| 3 | task 3 | NULL |
+---------+-----------+-------------+
Проблема в том, что мне нужно выбрать задачи из одного тега EXACT, но мне все равно нужно сохранить столбец тегов со всеми тегами, связанными с задачами. Я пытаюсь выполнить следующий запрос, но так как результат ограничен WHERE tag_id = 5, функция group_concat извлекает только тег с id = 5, например, "Работа":
SELECT t.task_id, t.data, GROUP_CONCAT(tg.name) AS tags
FROM tasks t
LEFT JOIN task_tag tt ON tt.task_id = t.task_id
LEFT JOIN tag tg ON tg.tag_id = tt.tag_id
WHERE tg.tag_id = 5
GROUP BY t.task_id
result
+---------+-----------+-------------+
| task_id | data | tags |
+---------+-----------+-------------+
| 1 | task 1 | work |
+---------+-----------+-------------+
Результат, которого я пытаюсь достичь:
result
+---------+-----------+-------------+
| task_id | data | tags |
+---------+-----------+-------------+
| 1 | task 1 | work,home |
+---------+-----------+-------------+
Большое спасибо за любые предложения по решению этой проблемы!