-1

例如,如果我搜索“猫”,我会得到所有包含“猫”字样的标题,例如“帽子里的猫”。

如果我输入'cat hat',我应该返回'cat in the hat',但查询返回空,因为它正在寻找'cat hat'而忽略'cat in the hat'。

我需要某种选择,它用我搜索的任何单词查找所有标题,然后为下一个单词执行此操作,等等……然后……我不知道,某种大的东西……

到目前为止,我正在玩类似的东西:

$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search . "%' LIMIT 0,75;";

可能需要某种递归函数,它将搜索输入分解为字符串数组,并对每个字符串进行搜索,然后将它们合并。

想法?

4

4 回答 4

1

您正在寻找MySQL 全文搜索

于 2013-01-22T21:15:02.160 回答
0

答案:

  1. 将 $search 拆分为普通符号和空格,然后构建查询

  2. 使用MySql 全文搜索

陷阱:完整的 SQL 文本搜索是更好的选择,它会导致更快的结果。另请注意,您当前的查询容易受到 SQL 注入的影响,请使用mysqli::real_escape_string来避免这种情况。

谢谢

于 2013-01-22T21:19:36.603 回答
0

如果只是针对一个字段进行查询,您应该能够使用一组输入来执行此操作。如果是多个字段,则必须使用地图来完成。

我想指出的一件事是,这看起来很像是 SQL 注入的目标。将 SQL 查询连接到一个字符串中时,请务必小心。最终结果必须进行转义和/或参数化,以防止用户运行任意 SQL。

于 2013-01-22T21:17:31.840 回答
0
$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search1 . "%' AND LIKE '%" . $search2 . "%'  LIMIT 0,75;";

您需要为每个搜索词添加一个 AND 子句。如果需要,您还可以添加 OR。他们会给出不同的结果。OR 会有更多的结果,而 AND 当然会更具体。

于 2013-01-22T21:14:37.370 回答