【问题标题】:REGEXP BINARY sql syntax issueREGEXP BINARY sql 语法问题
【发布时间】:2013-06-15 08:16:53
【问题描述】:

我有这个$value= 24153; 我有一个字段可以保存一个或多个值,例如 {"id":"2","value":["3"]} 或 {"id":"2","value":["3","4"]} 或 {"id":"2","value":["3","4","2"]} 我有这个工作正常的正则表达式,但如果 ONE 值存在则返回。 如果字段中有多个值,我需要改进这个正则表达式。

REGEXP BINARY \'(.*{"id":"2","value":\["[^\"]*['.$value.'][^\"]*",?)+\]}.*\'

【问题讨论】:

  • -1 用于将 JSON 存储在数据库中,然后使用 REGEXP 进行搜索。唯一的想法让我恶心。

标签: mysql sql regex


【解决方案1】:

这是一个正则表达式,可以满足您的要求 - 但我必须同意您的常识 - 存储 json 然后使用正则表达式从中提取数据令人作呕

REGEXP BINARY \'(.*{"id":"2","value":\[("[^\"]*",)*"'.$value.'"(,"[^\"]*")*)+\]}.*\'

【讨论】:

    【解决方案2】:
    $value = 4;
    $subject_a = '{"id":"2","value":["4"]}';
    $subject_b = '{"id":"2","value":["1","4","1","1"]}';
    $subject_c = '{"id":"2","value":["1","1","1","1","1","44","1","1"]}';
    $pattern = '/{"id":"2","value":\[("|\d|,)*"' . $value . '"("|\d|,)*\]/';
    
    $matches[0] = preg_match($pattern,$subject_a);
    $matches[1] = preg_match($pattern,$subject_b);
    $matches[2] = preg_match($pattern,$subject_c);
    
    echo '<pre>';
    var_dump($matches);
    echo '</pre>';
    

    结果将是:

    array(3) {
       [0]=> int(1)
       [1]=> int(1)
       [2]=> int(0)
    }
    

    【讨论】:

    • 好的,这里是返回结果的旧查询 SELECT ... AND extra_fields REGEXP BINARY '(.*{"id":"2","value":["[^\"]* [1][^\"]*",?)+]}.*' ORDER BY i.id DESC 但仅基于 $subject_a 结构。这是什么都不返回的新查询! SELECT ... AND extra_fields REGEXP BINARY '{"id":"2","value":[("|\d|,)*"1"("|\d|,)*]' ORDER BY i. id DESC
    • SELECT * FROM table WHERE column REGEXP BINARY '{"id":"2","value":[[0-9",]*"4"[0-9",]* ]}';假设 4 是你的价值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多