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