使用一个标签查找域名?

时间:2011-01-27 23:14:14

标签: sql mysql full-text-search

我在table1

中拥有tags的域名

tags由逗号分配。示例

domain        tags
facebook.com  facebook,social,networking,friends,community

我想通过一个标签搜索域名,说“社交”,那我该怎么做呢? 我正在将此查询用于多个标记,但它不适用于单个标记。

SELECT * FROM table1 WHERE MATCH (tags) AGAINST ('social')

我已在表1中启用了全文搜索

如何使用单个标记进行查询,并获取与social

相关的域的信息

3 个答案:

答案 0 :(得分:0)

这应该可以帮到你:

select * from table1 where tags like '%social%'

答案 1 :(得分:0)

正如其他人所建议的那样,LIKE查询可能会为您提供所需内容,但请记住,所有这些示例都会匹配social标记和任何包含该短语的标记社交“在其中(例如,如果您有social-networkingice-cream-social等标记,则会匹配所有这些标记。

真的应规范化这个表结构。删除tags列并引入另一个表。类似于DomainTag

DomainTag
-------------
DomainId
TagId

具有多个标记的域将导致DomainTag中的多行。要查找具有给定标记的域,请对DomainTag进行查询,如果Domain不是DomainId,则加入domain,或只返回域名直接

答案 2 :(得分:0)

注意:其他人建议使用LIKE,但它没有针对全文查询进行优化,因为它会扫描整个表格。

您可能需要查看MATCH.. AGAINST的手册,看看是否遗漏了任何内容。 e.g。

  • 如果您的行中有50%包含标记社交,那么它根本不会在索引中(太常见)

但真正的问题很可能是你应该指定模式

SELECT * FROM dom2 WHERE MATCH (tags) AGAINST ('social' in boolean mode)