【问题标题】:Search for keywords in more than one fields of mysql database在mysql数据库的多个字段中搜索关键字
【发布时间】:2013-06-05 17:37:57
【问题描述】:

我想进行网站搜索。问题是我要搜索 3 列,如果搜索查询是这些字段中的任何一个,结果中将显示一行。 我的意思是如果有人搜索“keyword1关键字2关键字3”,我们搜索的列是页面名称,标题和描述,所以如果关键字1只在标题中,关键字2只在名称中,关键字3只在描述中,这将是一个有效的结果。

我只是无法弄清楚这背后的逻辑。我尝试在带有 OR 运算符的 sql 中使用正则表达式,但这仍然需要标题、名称或描述中的所有关键字。知道我是如何做到这一点的吗?

【问题讨论】:

    标签: php mysql search


    【解决方案1】:

    请看MySQL LIKE IN()?

    您可以将空格替换为 |使用 str_replace 并构建如下查询:

    SELECT * from mytable where pagename REGEXP 'keyword1|keyword2|keyword3' and title REGEXP 'keyword1|keyword2|keyword3' and description REGEXP 'keyword1|keyword2|keyword3';
    

    【讨论】:

    • 哇!这么容易?是否有任何简单的方法可以根据找到关键字的位置对结果进行排序。例如如果它在标题中,它将比在描述中排名更高。
    • 取决于你想给多少权重.. 假设我给标题 5 和描述 3:这是修改后的查询: SELECT *, 5*(title REGEXP 'keyword1|keyword2|keyword3 ')+3*(description REGEXP 'keyword1|keyword2|keyword3') 作为 mytable 的排名 where pagename REGEXP 'keyword1|keyword2|keyword3' 和 title REGEXP 'keyword1|keyword2|keyword3' 和 description REGEXP 'keyword1|keyword2|keyword3' ;
    • 如果您的数据库引擎支持,您还必须考虑使用mysql fulltext search。这非常快,并且提供了更好的搜索结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多