匹配mysql数据库中的关键词

时间:2018-07-14 09:06:26

标签: mysql sql

m试图匹配关键字,但不完全匹配,这是相关的,我使用带有通配符%%的sql LIKE之类的'%mens, shoe%'来匹配每个数据,无论是男鞋,男鞋还是两者都匹配,但是问题是如果用户使用像这样的'%men\'s, shoe%'这样的撇号,则只会匹配有男鞋或带有撇号的男鞋的记录,而不会匹配男式或男式的记录,有没有办法让我输入带有撇号的匹配记录而没有撇号谢谢您的帮助

我正在编辑我的问题并添加SQL语句的外观

 SELECT SQL_CALC_FOUND_ROWS p.product_id,p.title,p.price,p.unit_sold,p.slug,p.discount,p.free_shipping,free_return,
                p.profile_img,p.store_name,p.item_number,
                (
                    (-- Title score
                    if (title LIKE '%men\'s, shoe%',6,0) + if (title LIKE '%men\'s%',5,0) + if (title LIKE '%shoe%',5,0)
                    )+
                    (-- description
                    if (description LIKE '%men\'s, shoe%',5,0) + if (description LIKE '%men\'s%',4,0) + if (description LIKE '%shoe%',4,0) 
                    )+
                    (-- item number
                    if (item_number = 'men\'s, shoe',4,0) + if (item_number =  'men\'s',3,0) + if (item_number =  'shoe',3,0) 
                    )+
                    (-- category id
                    if (category_id = 'men\'s, shoe',4,0) + if (category_id = 'men\'s',3,0) + if (category_id = 'shoe',3,0) 
                    )

                ) as relevance
                FROM products p
                WHERE p.is_active = '1'

                HAVING relevance > 0
                ORDER BY  relevance DESC LIMIT 2,2

2 个答案:

答案 0 :(得分:0)

您的状况应如下:

someColumn LIKE '%men''s%' or someColumn LIKE '%men\''s%' or someColumn LIKE '%shoe%'

其中someColumn是您感兴趣的列名。它将匹配任何出现的事件,例如:men'smen\'s等。

答案 1 :(得分:0)

在比较之前删除撇号:

(-- Title score
 (case when replace(title, '''', '') LIKE '%mens, shoe%' then 16
       when replace(title, '''', '') LIKE '%men%' then 5
       when replace(title, '''', '') LIKE '%shoe%' then 5
       else 0
  end) +
   . . . 

也就是说,您可能希望研究全文搜索。这可能是实现所需目标的一种简单方法。