mysql 匹配 隔开的_按空格分隔关键字并搜索MySQL数据库
发布日期:2021-06-24 16:15:37 浏览次数:5 分类:技术文章

本文共 1123 字,大约阅读时间需要 3 分钟。

我正在使用PHP和MySQL.我将在下面提供一个简单的表格:

------------------------------------------------------

| id | text |

------------------------------------------------------

| 1 | The quick brown fox jumped over the lazy dog |

------------------------------------------------------

我希望用户能够使用以空格分隔的关键字进行搜索.我有一个简单的SQL查询,上面是SELECT * FROM表WHERE文本LIKE%[$keyword]%,这意味着如果我搜索“快速狐狸”,我将不会得到任何结果.有没有办法用空格分隔关键字,所以如果我搜索“快速狐狸”,它将运行3次搜索.一个用于“The”,一个用于“快速”,一个用于“狐狸” – 删除所有空白区域.虽然它应该只显示一个结果,因为它全部属于同一行而不是3,因为所有3个关键字都匹配行中的数据.

最好的方法是什么?我们欢迎所有建议做得更好.谢谢!

[编辑]

刚想到这一点,用逗号(,)分隔关键字是一个更好的选择吗?

解决方法:

SELECT *

FROM tbl

WHERE

LOWER(`text`) REGEXP '\b(the|quick|fox)\b'

火柴:

>快速的棕色狐狸跳过懒狗

>快,拿到狐狸!

>我吃了蛋糕

不匹配

>棕色的狗

在PHP中,您可以通过在空格上拆分搜索字符串并将其重新插入到|来构建此表达式在逃避每个组件之后.

$str = "the quick brown fox";

$kwds = explode(" ", $str);

$kwds = array_map("mysql_real_escape_string", $kwds);

$regexp = "\b(" . implode("|", $kwds) . ")\b";

然后在语句中使用REGEXP’$regexp’.

附录:

由于您没有在OP中提及它,我想确保您了解MySQL在MyISAM表上的全文搜索功能,以防它满足您的需求.根据您的描述,全文听起来并不完全符合您的要求,但您应该将其视为可能:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

标签:mysql,sql-like,keyword

来源: https://codeday.me/bug/20190729/1574192.html

转载地址:https://blog.csdn.net/weixin_33758343/article/details/114783232 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java factory用法_怎样使用Java实现Factory设计模式
下一篇:mysql 删除check_PostgreSQL 删除check约束的实现

发表评论

最新留言

很好
[***.229.124.182]2024年04月18日 12时41分15秒