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

时间:2017-08-17 09:25:58

标签: mysql

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

架构就是这样:

表格标签:

| 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.如何提取与用户标签匹配的公司?

由于

2 个答案:

答案 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