例如,如果我搜索"cat",我会得到所有带有"cat"一词的标题,例如"cat in the hat"。
如果我输入"cat hat",我应该得到"cat in the hat",但查询返回空,因为它正在寻找确切的"cat hat"并忽略"cat in the hat"。
我需要某种选择,它可以查找带有我搜索的任何单词的所有标题,然后对下一个单词执行此操作,等等......然后...我不知道,某种大而有趣的东西...
到目前为止,我玩的是这样的东西:
$query = "SELECT title
FROM books
WHERE TITLE LIKE '%" . $search . "%' LIMIT 0,75;";
可能需要某种递归函数,它将搜索输入分解为字符串数组,并对每个字符串进行搜索,然后合并它们。
想法?
您正在寻找 MySQL 全文搜索
$query = "SELECT title
FROM books
WHERE TITLE LIKE '%" . $search1 . "%' AND LIKE '%" . $search2 . "%' LIMIT 0,75;";
您需要为每个搜索词添加一个 AND 子句。如果需要,您还可以添加 OR。他们会给出不同的结果。OR会有更多的结果,当然AND会更具体。
如果输入数组只是针对一个字段进行查询,您应该能够执行此操作。 如果是多个字段,则必须使用地图执行此操作。
我想指出的一件事是,这看起来很像SQL注入的目标。 在字符串中将SQL查询连接在一起时,请非常小心。 最终结果必须转义和/或参数化,以防止用户运行任意SQL。
答案:
-
拆分普通符号和空格上的$search,然后生成查询
-
使用 MySql 全文搜索
陷阱:完整的SQL文本搜索是更好的选择,它将产生更快的结果。 另请注意,您当前的查询容易受到 SQL 注入的攻击,请使用 mysqli::real_escape_string 来避免这种情况。
谢谢