根据搜索查询从数据库返回行

时间:2011-08-13 21:34:53

标签: php mysql sql

我正在使用具有以下架构的产品表:

products (itemname VARCHAR(50), itemid INT(10));

示例记录如下所示(itemnameitemid):

  • 黑莓曲线3g(黑色),1
  • 三星王牌,3
  • 黑莓曲线3g(白色),2
  • apple iphone 4 32gb(黑色),4

现在假设用户将查询输入到网站的搜索框中,并显示相应的结果。即如果用户输入blackberry,则应显示Blackberry手机

我正在寻找以下问题的答案:

  1. 搜索文本如何与项目匹配?例如:用户可以 在搜索框中输入blackberry然后如何搜索? 我应该将blackberry字词作为itemname的子字符串进行搜索 上表中的一栏?
  2. 如果用户输入两个字,例如:apple 32gb。现在,如果我使用 上面提到的子字符串方法然后它不会工作,因为表中没有apple 32gb作为子字符串的行。在这种情况下如何搜索?
  3. 如果用户输入非常通用的搜索文本,例如:mobiles。在这种情况下,应显示所有手机。在这种情况下,匹配itemname作为子字符串也不起作用。
  4. 用户可以输入搜索文本:apple 32gb black color。在这种情况下,应显示32GB容量和黑色的苹果产品。
  5. 我知道无法实现100%正确的搜索。我只是在寻找提示/如何进行。我正在使用PHP,MySQL,Apache。

2 个答案:

答案 0 :(得分:1)

这是什么类型的数据库,如果MySQL你可以在该字段上启用全文搜索,然后只是一个简单的查询将获得你期望的结果。

答案 1 :(得分:1)

对于许多单词搜索我会做这样的事情:

$searchArray = explode(" ", $searchString);
foreach ($searchArray as $word)
{
    //add an OR clause to your sql query like the following
    $query .= "OR itemname like %".$word."%";
}

其他问题要复杂得多,但我希望这有帮助