У меня есть запрос, который сейчас забивает мне мысли.
Вот мой базовый c запрос:
SELECT e.id AS `equipment.id`, t.id AS `task.id`, ttr.tags_id AS `tag.id`
FROM equipment e
LEFT JOIN task t ON t.equipment = e.id
INNER JOIN task_tag_relationship ttr ON ttr.task_id = t.id
WHERE e.id = 14;
И его результат:
equipment.id task.id tag.id
14 10520 171
14 152040 171
14 223738 1
14 223738 4
14 331035 1
14 331035 4
14 1475152 1
14 1475152 4
14 1475152 5
То, что я хотел бы, - это конкатенировать tags.ids
от каждого task
с, скажем, ,
, а затем конкатенировать эти конкатенированные tags.ids
с ;
:
equipment.id tags.ids
14 171;171;1,4;1,4;1,4,5
Мне удалось сделать это с помощью следующего запроса:
SELECT GROUP_CONCAT(tags SEPARATOR ';') as `tags.ids`
FROM (
SELECT GROUP_CONCAT(ttr.tags_id) as `tags`
FROM task t
INNER JOIN task_tag_relationship ttr ON ttr.task_id = t.id
WHERE t.equipment = 14
GROUP BY t.id
) as `task.tags`;
Но дело в том, что я не могу использовать этот запрос в запросе, подобном этому:
SELECT
e.id,
SELECT GROUP_CONCAT(tags SEPARATOR ';') as `tags.ids`
FROM (
SELECT GROUP_CONCAT(ttr.tags_id) as `tags`
FROM task t
INNER JOIN task_tag_relationship ttr ON ttr.task_id = t.id
WHERE t.equipment = e.id -- here's the problem, e.id is not available in the sub-subquery
GROUP BY t.id
) as `task.tags`
FROM equipment e
WHERE e.id = 14
У меня есть я пытался сделать это с JOINs
и GROUP BYs
, но без лучших результатов.
Я, очевидно, мог бы сделать это в коде, но мне интересно, выполнимо ли это в MySQL.
Заранее спасибо!