产品搜索php mysql

0 php mysql search product

我试图从数据库中创建一个产品的搜索.

我的DB:

tbl_brand
-----------
brand_id Brand_name
1        Canon
2        Nikon

tbl_product
-------------
prod_id  prod_name                                                    brand_id
1        Canon PowerShot A810 16MP Point & Shoot Digital Camera       1
2        Canon Digital Camera PowerShot 8MP Point & Shoot             1
3        PowerShot 8MP Point & Shoot Digital Camera                   1
4        PowerShot 8MP Point & Shoot Digital                          1
Run Code Online (Sandbox Code Playgroud)

我的搜索关键字:

  1. $keyword = 'Camera';
  2. $keyword = 'Digital Camera';
  3. $keyword = 'Canon Digital Camera';
  4. $keyword = 'Canon Camera';

我的查询

Select * from tbl_product where prod_name like '%$keyword%'
Run Code Online (Sandbox Code Playgroud)

我得到前三个关键字的结果.但对于第四个关键字,我得到结果为空.

Canon Camera - 关键字与产品名称不匹配.但所有产品仅限佳能品牌,所有产品仅限相机.

我需要显示"佳能相机"关键字的所有产品.我是php和mysql的新手.请帮忙.

ech*_*_Me 6

尝试这个 MATCH .. AGAINST

以下是如何使其工作:

  1. 首先确保您的表使用MyISAM存储引擎.MySQL FULLTEXT索引仅支持MyISAM表.(编辑11/1/2012: MySQL 5.6为InnoDB表引入了一个FULLTEXT索引类型.)

    ALTER TABLE tbl_product ENGINE=MyISAM;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建全文索引.

    CREATE FULLTEXT INDEX searchindex ON tbl_product(prod_name);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 搜索一下!

    $keyword = mysql_real_escape_string($keyword);
    $query = mysql_query("SELECT * FROM tbl_product 
        WHERE MATCH(prod_name) AGAINST('$keyword')");
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,您在MATCH子句中命名的列必须与您在全文索引定义中声明的列的顺序相同.否则它将无法工作.