2017-08-17 106 views
0

好的,所以這是我的問題: 我有標籤系統,可以歸因於用戶和公司。我想提取與用戶標籤匹配的公司。通過標籤ID使用多對多關係搜索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和公司1.如何提取與用戶標籤相匹配的公司?

感謝

+1

只是爲了檢查...'表標籤',第3行,id應該是3?並且'表公司標籤'真的有id_user嗎? – AjahnCharles

+0

@CodeConfident無關緊要,表標籤內部可以有很多標籤。這是在一個登錄系統下,因此每個登錄用戶都可能有不同的標籤。 –

+2

那麼你有什麼嘗試,你得到了什麼錯誤?或者你只是想讓我們做這項工作? – nacho

回答

0

基本上開始在另一端保持連接:用戶 - UserTag - CompanyTag - 公司:

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 

...在給出對(用戶,公司),其股份至少一個標籤。

內部聯接刪除在聯接兩側都沒有數據的行。
通過刪除鏈接同一個用戶公司的多個標籤引起的重複。

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