MySQL存储和搜索字符串

MySQL存储和搜索字符串,mysql,string,store,Mysql,String,Store,我目前正在开发自己的博客系统。当前,当您创建一篇新文章时,您可以选择将自己选择的it类别存档 目前,我正在mysql数据库中将这些类别存储为VARCHAR值。例如,如果用户选择了ID为2、4和8的类别,则该字段将包含2、4、8 要检索ID为4的类别的博客文章,请使用: SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,',')) 有人告诉我,对于好的数据库结构,用小数点逗号分隔的值是不可能的(非常糟糕) 有谁能给我提供一个好的方法

我目前正在开发自己的博客系统。当前,当您创建一篇新文章时,您可以选择将自己选择的it类别存档

目前,我正在mysql数据库中将这些类别存储为VARCHAR值。例如,如果用户选择了ID为2、4和8的类别,则该字段将包含2、4、8

要检索ID为4的类别的博客文章,请使用:

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))
有人告诉我,对于好的数据库结构,用小数点逗号分隔的值是不可能的(非常糟糕)

有谁能给我提供一个好的方法/技巧,使之成为最有效的方法


提前感谢您在so中多次发布的灵活、可靠的设置:

POSTS
id
name
text

CATEGORIES
id 
name

POST_CATEGORIES
post_id
category_id
其中,当前查询将是:

SELECT p.id, p.name, p.text
FROM posts p
JOIN post_categories pc
ON pc.post_id = p.id
AND pc.category_id = 4;

研究关系数据库规范化。对于您的特定情况,考虑除了博客内容表之外,还要创建2个额外的表、类别和博客类别。类别包含所有标记/类别的定义,而不包含其他内容。BlogCategories表是一个多对多交叉引用表,在您的例子中可能只包含对Blog表的外键引用和对Categories表的外键引用。这允许1个博客条目与多个类别关联,1个类别与多个博客条目关联

最坏的情况下,获取数据不会比3表联接更困难,并且您将不再需要子字符串业务来确定您的业务逻辑