2

我的表中有一个名为标签的列。它有逗号分隔的文本(框、帽子、汽车)。

我从我的表中选择了一行,我想找到与所选行中的标签具有相似标签的其他行。

我知道这可能是一个更好的桌子设计,但我不能改变设计。

我知道这将在标签中搜索关键字,但我不想通过关键字搜索,而是通过标签列表进行搜索。

WHERE (',' + Tags + ',') LIKE '%,keyword,%'

有谁知道我会怎么做?

使用 MYSQL。

4

1 回答 1

2

你说你不能改变设计。能不能加一个 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 匹配逗号分隔的字符串就像用螺丝刀的手柄敲钉子一样。两者都需要很长时间并且非常尴尬。

于 2012-10-23T12:31:13.043 回答