好的,所以这是我的问题: 我有可以归因于用户和公司的标签系统。我想提取与用户标签匹配的公司。
模式是这样的:
表标签:
| 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