我在table1中有带有tags的域名
tags用逗号表示。示例
domain tags
facebook.com facebook,social,networking,friends,community我想通过一个标签搜索域,比如“社交”,那么我该怎么做呢?
我将这个查询用于多个标签,但它不适用于单个标签。
SELECT * FROM table1 WHERE MATCH (tags) AGAINST ('social')我已经在table1中启用了全文搜索
如何使用单个标签查询并获取social相关域名的信息
发布于 2011-01-28 07:17:29
这应该会对你有所帮助:
select * from table1 where tags like '%social%'发布于 2011-01-28 07:22:54
正如其他人所建议的那样,社交查询可能会得到您想要的结果,但请记住,所有这些示例都将匹配social标记和其中包含短语“LIKE”的任何标记(例如,如果您有一个像social-networking或ice-cream-social这样的标记,那么它将匹配所有这些标记)。
你真的应该规范化这个表结构。删除tags列并引入另一个表。就像DomainTag一样。
DomainTag
-------------
DomainId
TagId具有多个标签的域将在DomainTag中产生多行。要查找具有给定标记的域,可以对DomainTag执行查询,如果DomainId不是domain,则加入到Domain,或者直接返回域名。
发布于 2011-01-28 07:29:05
注意:其他人也有类似的建议,但它没有针对全文查询进行优化,因为它将扫描整个表。
你可能想看看MATCH.. AGAINST的手册,看看你是否遗漏了什么。例如:
,那么它将根本不会出现在索引中(太常见了)
但真正的问题很可能是您应该指定模式
SELECT * FROM dom2 WHERE MATCH (tags) AGAINST ('social' in boolean mode)https://stackoverflow.com/questions/4823087
复制相似问题