我有一个items
表,我想添加标签。用户最多可以为每个项目添加15个PREDEFINED标签中的三个。
通常,您会使用tag
表,但是由于我只有几个预定义标签,这些标签永远不会改变,所以我想知道是否有更简单的方法。
我正在考虑有一个tags
字段,其中每个位代表一个预定义标签。我将OR
选中的标签并存储一个int
。
现在我的问题是:什么样的查询会告诉我为大量行设置了哪些标记(来自int的位)?
答案 0 :(得分:0)
虽然我实际上不建议使用它,但这是SET
数据类型的设计目的。
它作为整数存储在列中,每一位代表一个标签。但是,当您获取值时,它会以标记的逗号分隔列表的形式返回,您可以用相同的方式分配值。要确定值中是否包含特定标签,请使用FIND_IN_SET()
函数。
您还可以访问列的数值。如果要掩盖某些位,这很有用。
上面链接的文档提供了更多详细信息以及一些警告。
虽然存储空间非常有效,但是对设置值的大多数操作都无法有效利用索引。例如,搜索带有特定标签的所有行将需要进行全面扫描。