【问题标题】:mysql - please advice with correct regexp syntaxmysql - 请使用正确的正则表达式语法提供建议
【发布时间】:2012-05-01 23:26:53
【问题描述】:

我正在 mysql 数据库中寻找正确的查询。假设我有表格:

用户:

id | user_name | desc
--------------------------
1  | john      | tall
2  | john      | fat
3  | maria     | pretty

项目:

id | item_name | color
--------------------------
1  | trousers  | red
2  | shoes     | blue
3  | shoes     | red

我的搜索引擎搜索数据库以选择带有查询的结果:

SELECT i.item_name, i.color, u.user_name, u.desc 
FROM users u, items i 
WHERE u.id = i.id 
   AND item_name REGEXP $keywords 
   AND user_name REGEXP $keywords

变量$keywords是这样的:

$keywords = explode(' ', $_POST['keywords']);
$keywords = implode('|', $keywords);

现在,当 $keywords = 'john trousers' 一切正常 - 我得到了 id = 1 的用户。没关系。但是当我设置 $keywords = 'john' 它返回空字符串。我什至知道为什么 - item_name 中没有“john”,所以我的 AND 条件返回 false。问题是: 什么是正确的正则表达式返回 user = 1 和 $keywords = "john trousers" 并且如果 $keyword = 'john' 得到两行 - id = 1 和 id = 2?

提前致谢。

【问题讨论】:

    标签: mysql regex


    【解决方案1】:

    您可以反转比较,使用列值作为搜索值(并使用LIKE 而不是REGEXP):

    SELECT i.item_name, i.color, u.user_name, u.desc 
    FROM users u, items i 
    WHERE u.id = i.id 
    AND $keywords like concat('%', item_name, '%')
    AND $keywords like concat('%', user_name, '%')
    

    请注意,虽然这是一种简洁的方法,但它仅在 keywords 包含列的 whole 值时才有效。要进行更复杂的比较,您需要尝试拆分值等(您必须自己进行调查)

    【讨论】:

    • 嗯,这肯定是解决问题的有趣方式。不幸的是,列的整个值必须适合关键字的条件搞砸了:(为你+1,我的朋友,但仍在等待另一个更合适的解决方案:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2014-07-18
    • 2017-12-09
    • 2019-12-31
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多