我的表中有一个名为tags的列。它中有逗号分隔的文本(盒子,帽子,汽车)。
我从表中选择一行,我想找到与所选行中的标签具有相似标签的其他行。
我知道它可能是更好的桌面设计,但我无法改变设计。
我知道这会在标签中搜索关键字,但我不想通过关键字搜索,而是通过标签列表进行搜索。
WHERE (',' + Tags + ',') LIKE '%,keyword,%'
有谁知道我会怎么做?
使用MYSQL。
答案 0 :(得分:2)
你说你无法改变设计。你能添加一个FULLTEXT索引并把这个表放在MyISAM访问方法中吗?如果是这样,您可以使用FULLTEXT搜索。对于您的应用程序,您最好使用BOOLEAN模式。
WHERE MATCH (tags)
AGAINST ('box hat -car' IN BOOLEAN MODE);
此特定搜索会查找关键字框和框,并排除关键字car。
这是一个描述。这可能适合你。 http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
您可以在InnoDB中运行FULLTEXT搜索。但我不相信你可以索引它。
如果您无法使用全文搜索,那么您的工作就会遇到错误的工具。使用SQL匹配逗号分隔的字符串就像用螺丝刀的把手敲击它们来驱动指甲一样。两者都需要很长时间,而且非常尴尬。