1

我正在学习 MySQL,并在 Fedora 19 中安装了 MariaDB。

我有一个场景,我需要一个列包含多个值,以减少列分配的可能冗余。

在下面的示例中,是否可以让表列中的每个值都tags引用log表中的tag_idtags

用户

user_id        |
1              |

活动

activitity_id  |
1

日志

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

标签

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

如果不可能,谁能提供基于上述数据场景的最可行解决方案的逻辑?

类似问题:

单个字段中是否有多个外键?

MySQL外键具有多个(条件)可能值

可以将一列引用为多个外键

4

1 回答 1

2

如果您不想组成一个“中间人”表来链接两个表,您可以在字段中使用逗号分隔值,您只需要find_in_set在查询时使用 mysql 函数

使用 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 将一个字段组合在一起并用分隔符分隔它们,默认为,

于 2013-07-29T15:02:11.803 回答