按空间分离关键字搜索MySQL数据库

按空间分离关键字搜索MySQL数据库,mysql,keyword,sql-like,Mysql,Keyword,Sql Like,我正在使用PHP和MySQL。我将在下面提供一个简单的表格: ------------------------------------------------------ | id | text | ------------------------------------------------------ | 1 | The quick brown fox jumped over the lazy dog |

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

------------------------------------------------------
|  id |                    text                      |
------------------------------------------------------
|  1  | The quick brown fox jumped over the lazy dog | 
------------------------------------------------------
我希望用户能够使用空格分隔的关键字进行搜索。我有一个简单的SQL查询,它是
SELECT*FROM table,其中的文本像%[$keyword]%
,这意味着如果我搜索“快速狐狸”,我将不会得到任何结果。有没有办法用空格分隔关键字,这样如果我搜索“快速狐狸”,它将运行3次搜索。一个代表“The”,一个代表“quick”,一个代表“fox”——删除所有空白。虽然它应该只显示一个结果,因为它都属于同一行,而不是3个,因为所有3个关键字都与行中的数据匹配

最好的方法是什么?我们欢迎所有关于如何做得更好的建议。谢谢

[编辑]

刚刚想到这个,用逗号分隔关键词是更好的选择吗?

< P>你可以考虑把单词分成一个或一个组。< /P>
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表上的全文搜索功能,以防它能够满足您的需要。从您的描述来看,全文听起来并不完全符合您的要求,但您应该作为一种可能来审查它:


我通过另一种连接查询字符串的方法实现了这一点

//此行包含四个用于搜索的单词
$str=“敏捷的棕色狐狸”

//查询字符串以小块形式写入,存储在变量“$uquery”
$uquery=“从tablename where中选择*”

//一个新变量“$keywords”将以数组形式保存这些值
$keywords=explode(“,$str”)
$keywords=array\u map(“mysql\u real\u escape\u string”,$keywords)

//“$k”将存储数组中元素的总数,在本例中应保留“4”
$k=count($keywords)

//定义变量“$i”等于零
$i=0

//启动while循环,该循环将持续4次,因为在本例中我们只有4个关键字

while($i)几乎可以肯定,您应该在生成查询的代码中处理这个问题,而不是在MySQL中谢谢你的关心,@ruakh。不过我已经涵盖了这一点。我只是不想把所有的事情都放在我希望人们关注的事情上。但是再次感谢你。好吧,但我坚持我的说法,你几乎可以肯定应该在生成查询的代码中处理这一点,而不是在MySQL中。所以为了得到最好的答案,y您应该显示生成查询的代码。是的,@ruakh。正如我所问的那样,这将是最好的方法之一。:)好了。谢谢你关注这个问题,我的朋友。让我试试你在这里包括的一些东西。我应该使用[[::]]而不是\b吗?这似乎不能从“Qui”中得到任何结果,它必须是“快速的”-有什么解决方法吗?@MikeSanchez此模式只能得到整个单词。如果需要多个关键字的部分匹配,则需要使用多个
LIKE
子句和一些算法来构造查询。