好的,这是我的问题: 我有标签系统,可归因于用户和公司。我想提取与用户标签匹配的公司。
架构就是这样:
表格标签:
| 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 |
两个标签:tag1和tag3出现在user1和company 1.如何提取与用户标签匹配的公司?
由于
答案 0 :(得分:0)
基本上从一端开始并继续加入:用户 - UserTag - CompanyTag - 公司:
clicked(thread: Thread): void {
this.newWindow = true;
if(this.threadService.windows.length === 2) {
// get the previously opened chat window
let oldThread = this.threadService.windows[0];
this.closeOldThread(oldThread);
}
if (!this.thread.isOpen) {
thread = this.chatService.openThread(thread);
this.chatService.setCurrentThread(thread);
this.thread.isOpen = true;
}
}
...提供至少共享一个标签的(用户,公司)对。
内部联接会删除在联接两侧没有数据的行 通过删除链接同一用户公司的多个标签产生的重复项进行分组。
答案 1 :(得分:0)
您可以按照我的预期尝试结果。
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