ご挨拶、
私は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 |
+---------+-----------+-------------+
問題は、1 つの EXACT タグからタスクを選択する必要がある場合ですが、タスクに関連付けられたすべてのタグを含むタグ列を保持する必要がある場合です。次のクエリを試してみましたが、結果が WHERE tag_id = 5 によって制限されているため、group_concat 関数は id = 5 のタグのみを取得します。たとえば、「work」:
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 |
+---------+-----------+-------------+
これを解決する方法についての提案をありがとうございました!