【发布时间】:2011-08-26 17:08:13
【问题描述】:
我正在网站上制作一个搜索功能,让用户搜索保存在 mysql 数据库中的值。
举个例子:
此表中有两种产品。
一个描述值为“可乐罐330ml”,另一个描述值为“雪碧罐330ml”。
现在在搜索这些项目时,假设用户输入 can 作为他们的字符串。显示这两个项目是因为它们都包含罐头。
如果用户输入可乐,可乐罐将被退回。
现在想象一下,您在数据库中拥有曾经生产过的每一罐汽水,每一罐都是一种产品。
这样的搜索功能,会有点麻烦。假设用户只想要两种产品,即可乐罐和雪碧罐。
他们需要搜索“coke OR sprite AND can AND 330ml”之类的内容
这应该只返回我的示例中使用的两种产品。
我面临的问题不是这个。我的搜索功能就像我原来的例子一样运行。我正在尝试包含某种 and,or,not 功能,但还没有完全决定这一切应该如何解决。
目前,搜索“可乐罐”将仅返回包含可乐和罐的结果。但是如果我搜索“coke sprite can”,则不会返回任何结果,因为没有包含字符串中使用的所有 3 个单词的结果。
这是查询:
$dataQuery = "
SELECT *
FROM `products`
WHERE upper(`desc`)
LIKE '%"
. implode("%'
AND upper(`desc`)
LIKE '%",
$keywords_array)
. "%'
ORDER BY `desc`";
$keywords_array是用户输入的搜索字符串组成的数组,验证后代码如下:
$find = strtoupper($find);
$find = strip_tags($find);
$find = trim ($find);
$_SESSION['find'] = $find;
$keywords_array = explode(' ', $find);
$find是用户输入的搜索字符串的post值设置的字符串。
有没有人对完成我所解释的内容的好方法有任何想法?
如果您需要任何其他代码或更好的解释,请尽管询问!
谢谢!!
【问题讨论】:
-
如果您使用的是 MyISAM 表,请使用允许自然语言搜索“(coke or sprite) +can”类型语法的全文索引。