MySQL属性在一列中有多个条目?

时间:2012-10-14 03:13:29

标签: mysql

这可能看起来很奇怪,但我想知道是否有可能让MySQL表有一个可以包含值列表的列。例如,假设我有一个代表Facebook等朋友列表的表,我怎样才能在表格中模拟这个?我想你可以将用户名添加到属性列中,但不确定这是最好的想法,甚至不知道如何做到这一点。关于如何实现这个或替代方案的任何建议?

3 个答案:

答案 0 :(得分:2)

在某些情况下,您可以使用SET type,其功能与ENUM type相似。它允许您在字段中存储一个或多个预定义值。但是,对于Facebook好友案例来说,这是不切实际的,因为每次创建新用户时,列定义都需要更新。

Wolfram建议使用映射表肯定是更好的解决方案,因为它还允许使用外键约束,这将确保删除一个用户时的参照完整性(假设您使用级联)。此外,如果您需要在JOIN中使用该关系,则映射表是唯一的解决方案。

答案 1 :(得分:1)

所以你要找的是,与facebook的例子一致,就是要有一个包含两列的表。第一个是识别用户,第二个是用户朋友的列表?

据我所知,你不能像列一样对待列。

可以包含一个字符串,其中包含由短划线分隔的所有单个名称,但这些字符串将不健壮。

我的建议是拥有一个包含两列的朋友表,这两列都是varchars或字符串。每列仅包含1人的姓名或身份,表示这两个人之间的友谊。

然后,如果你想要一个foobar的朋友列表,你只需查询:

SELECT *
FROM friends
WHERE user_a == 'foobar' || user_b == 'foobar'

现在,这实际上会给你两个列,其中一个是foobar,其中一个是他/她的朋友。所以你可能需要有点创意才能把它分成foobar的朋友,但我相信你可以找到适合你代码的方法。

答案 2 :(得分:1)

虽然这通常不是一个好主意,但MySQL确实有这个:

FIND_IN_SET('b','a,b,c,d')

SELECT ... FROM friends WHERE FIND_IN_SET('foo',friends_list) > 0;

所以你可以很轻松地完成你的要求。这通常不会被建议。