2013-07-29 38 views
1

我正在學習MySQL並在Fedora 19中安裝了MariaDB。是否可以將包含多個值的MySQL列作爲外鍵?

我有一個場景,我需要一列包含多個值以減少可能的列分配冗餘。

在下面的示例中,log表的tags列中的每個值是否可以參考tags表中的tag_id列?

用戶

user_id  | 
1    | 

活動

activitity_id | 
1 

日誌

user_id  | activity_id | tags 
1    | 1    | 1,3,5 # multiple foreign keys? 

TA GS

tag_id   | 
1    | 
2    | 
3    | 
4    | 
5    | 

如果是不可能的,任何人都可以基於上述數據的情況下最可行的解決方案提供邏輯?

類似的問題:

Are multiple foreign keys in a single field possible?

MySQL foreign key having multiple (conditional) possible values

it is possible to reference one column as multiple foreign keys

回答

2

如果你不希望做一個 「中間人」 表,你可以有兩個錶鏈接在該字段中使用逗號分隔值,您只需在執行查詢時使用find_in_set mysql函數

USING FIND_IN_SET

SELECT 
    log.user_id, log.activity_id, log.tags, 
    GROUP_CONCAT(tags.name) as taggedNames //This assumes there is a field called `name` in tags table 
FROM 
    log 
LEFT JOIN tags 
ON 
    FIND_IN_SET(tags.tag_id,log.tags) 
GROUP BY 
    log.activity_id 

GROUP_CONCAT將組在一起的場,並通過deliminator它們分開,默認是,

+0

'ERROR 1054(42S22):未知列在 'log.user_id''字段列表'' – user1063287

+1

@ user1063287忘記將'log'表添加到'FROM'子句 –

+0

'空集(0.01秒)' - 我是否需要爲上述查詢添加更多定義? log.tags中記錄1的內容是「1,2」(VARCHAR(30))。 – user1063287

相關問題