在 mySql 中搜索带有空格的文本与 Query 匹配

Man*_*ani 2 mysql subquery php mysql-5.6

我想用 [space] (Ascii 32) 作为其中的一部分在 mysql DB 中搜索文本。但我没有得到正确的结果。

我的 MySql 查询是:

SELECT count(id) as total
    , MIN(product_price) as min_price
    , MAX(product_price) as max_price 
FROM `products_details` 
WHERE subcat_id = 1026 
    AND MATCH(alternate_name, product_desc, keywords)
    AGAINST ('+moto +g +plus +(>mobile <mobiles)'; IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

AGAINST ('+moto +g +plus +(>mobile <mobiles)'

我想moto g plus使用上面的查询搜索字符串移动。我想在g. 例如,moto "SPACE"g"SPACE"

我尝试了以下 2 个解决方案,但它不起作用。

[[:空间:]]

AGAINST ('+moto +[[:space:]]g[[:space:]] +plus +(>mobile <mobiles)'

AGAINST ('+moto +\\ g\\ +plus +(>mobile <mobiles)' ==> 我在此查询中的 \ 后面有一个空格字符(Ascii 32)

他们两个都没有工作。

你能告诉我应该有什么吗?

编辑:ft_min_word_len 的值设置为 1。

Ric*_*mes 5

FULLTEXT需要空间是空间,而不是“字母”。也就是说,“单词”中不能有空格。

我会编写应用程序代码来忽略“短”字(例如“g”)并以

WHERE MATCH(alternate_name, product_desc, keywords)
        AGAINST ('+moto +plus'; IN BOOLEAN MODE)
  AND ( alternate_name LIKE '%moto g plus%'
     OR product_desc   LIKE '%moto g plus%'
     OR keywords       LIKE '%moto g plus%' )
Run Code Online (Sandbox Code Playgroud)

这将是有效的,因为MATCH首先发生,从而显着限制了行数。然后成本高昂OR并且LIKE不必接触许多行。

(我在本次讨论中省略了“手机”。)