Mysql REGEXP 2 words -- 与 AND LIKE 相同

标签 mysql sql sql-like regular-language

我有

SELECT p.*, gc.*, g.*, m.*, b.*
FROM (products AS p)
LEFT JOIN merchants AS m
    ON m.merchantId = p.merchantId
LEFT JOIN brands AS b
    ON b.brand = p.brand
LEFT JOIN groups_content gc
    ON p.brand = gc.brandsSelect
LEFT JOIN groups g
    ON g.group_id = gc.group_id
WHERE `p`.`percentOff` > gc.percent_off
    AND `g`.`group_active` = 1
    AND `p`.`price_sale` BETWEEN gc.price_min
        AND gc.price_max
    AND `gc`.`group_content_id` = '180'
    AND `p`.`keyword` LIKE '%women%' AND `p`.`keyword` LIKE '%jacket%'
    AND `p`.`status` = 1
ORDER BY p.price_sale ASC 

这会返回 158 个结果

我也有

SELECT p.*, gc.*, g.*, m.*, b.*
FROM (products AS p)
LEFT JOIN merchants AS m
    ON m.merchantId = p.merchantId
LEFT JOIN brands AS b
    ON b.brand = p.brand
LEFT JOIN groups_content gc
    ON p.brand = gc.brandsSelect
LEFT JOIN groups g
    ON g.group_id = gc.group_id
WHERE `p`.`percentOff` > gc.percent_off
    AND `g`.`group_active` = 1
    AND `p`.`price_sale` BETWEEN gc.price_min
        AND gc.price_max
    AND `gc`.`group_content_id` = '180'
    AND `p`.`keyword` REGEXP 'women.+jacket'
    AND `p`.`status` = 1
ORDER BY p.price_sale ASC

这应该返回与之前相同的结果。但只返回17 个结果。我做错了什么?

------------

经过多次搜索,这是正确的正则表达式

AND p.`keyword` REGEXP '^(.+jacket.+women.+)|^(.+women.+jacket.+).*$'

最佳答案

你的正则表达式等不是等价的语句:

CREATE TABLE tab(keyword VARCHAR(100));

INSERT INTO tab(keyword)
VALUES ('jacket for women');

SELECT *
FROM tab p
WHERE  `p`.`keyword` LIKE '%women%' AND `p`.`keyword` LIKE '%jacket%';
-- jacket for women

SELECT *
FROM tab p
WHERE p.`keyword` REGEXP 'women.+jacket';
-- (empty)

SqlFiddleDemo

"woman" 字符串中的任意位置和 "jacket" 字符串中的任意位置

对比

"woman" 开头,然后是任何字符,最后是 "jacket"

编辑:

But How do I get -- "woman" anywhere in string and "jacket" anywhere in string --- using regular expression?

一种方法是使用:

SELECT *
FROM tab
WHERE keyword REGEXP '.*women.*'
  AND keyword REGEXP '.*jacket.*';

我确信对于这种情况存在一个正则表达式。

关于Mysql REGEXP 2 words -- 与 AND LIKE 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283873/

相关文章:

asp.net - 如何在 asp.net 中使用 mysql?

sql - 我需要使用 Over () 子句将单列中的 2 个计数值放在同一行中

oracle - 如何将 INSERT INTO 与此 PL/SQL 代码块一起使用?

MySQL:限制记录数量的百分比?

mysql - 选择在同一个月内从两个特定类别中至少购买了一个的客户数

mysql - 如何返回 2 COUNT()

sql - 检查ES和SQL数据库之间的区别

sql - 哈萨克符号的​​ LIKE 模式

php - 搜索名字和姓氏,按匹配准确度排序

c# - 打开: underlying provider failed on Open