本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!