使MySQL全文搜索以使用AND

时间:2016-04-20 10:50:23

标签: php mysql full-text-search

我已经尝试了多年,以我想要的方式完成这项工作,但我一直都在失败。

我有一个包含4列的表格。第二个(“itemname”)是应该搜索的那个。值包含特殊字符,如“/”和“(”。

工作部分:正在忽略特殊字符,右边的条目会匹配。

非工作部分:这是在很多其他比赛之间,我需要。

我的查询:

$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat
         FROM pricedata 
         WHERE MATCH itemname AGAINST ('%" . $search . "%' IN BOOLEAN MODE)
         ORDER BY itemprice DESC LIMIT 15");

示例: 我需要找到一个价值为“M4A1-S / Hyper Beast(Factory New)”的物品。

搜索:“ M4A1-S Hyper

  1. M4A1-S / 超级野兽(崭新出厂)”
    • (右/两个单词匹配)
  2. M4A1-S / Golden Coil(崭新出厂)”
    • (错误/只有一个字匹配)
  3. “AWP / 超级野兽(崭新出厂)”
    • (错误/只有一个字匹配)
  4. 基本上:搜索栏中的每个字都应该用“AND”而不是“OR”来对待。

    我自己试图找到解决方案,但我无法使其发挥作用。

    提前多多感谢! :)

    编辑:新建议的查询没有结果:

    $query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat  
    FROM pricedata  
    WHERE itemname REGEXP '%" . $search . "%'  
    ORDER BY itemprice DESC LIMIT 15");
    

1 个答案:

答案 0 :(得分:0)

我认为你可以使用正则表达式

try this site to understand regex

' M4A1-S。+ Hyper' - 匹配两个单词' M4A1-S'成为第一个词                       '超'是第二个

$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat
         FROM pricedata 
         WHERE itemname REGEXP 'M4A1-S.+Hyper'
         ORDER BY itemprice DESC LIMIT 15");

来源:check this