我为我的个人图书馆编写了一个图书馆搜索程序,但是选择多个单词时出现问题

时间:2013-01-22 21:11:42

标签: php sql

例如,如果我搜索'cat',我会在其中找到所有带有'cat'字样的标题,例如'cat in the hat'。

如果我输入'猫帽',我应该回来'戴着帽子的猫',但查询返回空,因为它正在寻找'猫帽'而忽略'帽子里的猫'。

我需要某种选择,用它搜索的任何单词查找所有标题,然后对下一个单词进行查找等等......然后......我不知道,某种大的东西。 ..

到目前为止,我正在尝试一些像:

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

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

想法?

4 个答案:

答案 0 :(得分:1)

您正在寻找MySQL Full-Text Search

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果只是查询一个字段,您应该可以使用一组输入执行此操作。如果是多个字段,则必须使用地图。

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

答案 3 :(得分:0)

数目:

  1. 在正常符号和空格上拆分$ search,然后构建查询

  2. 使用MySql Full Text Search

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

    由于