使用多对多关系 mysql 按标签 ID 搜索



好的,所以这是我的问题: 我有可以归因于用户和公司的标签系统。我想提取与用户标签匹配的公司。

模式是这样的:

表标签:

| id | tag_name |
| 1  |   tag 1  |
| 2  |   tag 2  |
| 3  |   tag 3  |

表用户:

| id | user_name |
| 1  |   user1   |
| 2  |   user2   |

表用户标签:

| id | id_user | id_tag |
| 1  |    1    |   1    |
| 2  |    1    |   3    |

表公司:

| id | company_name |
| 1  |  company 1   |
| 2  |  company 2   |

表公司标签:

| id | id_user | id_company | id_tag |
| 1  |    1    |      1     |   1    |
| 2  |    1    |      1     |   3    |

两个标签:标签 1 和标签3 都存在于用户 1 和公司 1 上。如何提取与用户标签匹配的公司?

谢谢

基本上从一端开始,继续加入: User--UserTag--CompanyTag--Company:

SELECT u.id, c.id
FROM       Users u
INNER JOIN UsersTags ut        ON u.id = ut.id_user
INNER JOIN CompaniesTags ct    ON ct.id_tag = ut.id_tag
INNER JOIN Companies c         ON ct.id_company = c.id
GROUP BY u.id, c.id

。提供至少共享一个标签的(用户、公司(对。

内部联接会删除联接两侧都没有数据的行。
分组方式是删除链接同一用户公司的多个标签产生的重复项。

您可以按照我的预期尝试结果。

SELECT 
u.id,
c.id ,
GROUP_CONCAT(t.tag_name SEPARATOR '<br/>') AS Tags
FROM Users u
INNER JOIN UsersTags ut ON(u.id = ut.id_user)
INNER JOIN CompaniesTags ct ON (ct.id_tag = ut.id_tag)
INNER JOIN Companies c ON (ct.id_company = c.id)
INNER JOIN Tags t ON (t.id = ct.id_tag)
GROUP BY u.id, c.id

最新更新