2013-06-18 45 views
-1

我有这个$value= 24153; 我有一个可以容纳这样{"id":"2","value":["3"]}或类似的一个或多个值的字段这个{"id":"2","value":["3","4"]}{"id":"2","value":["3","4","2"]} 我有这样的正则表达式工作正常,但如果一个值存在的回报。 我需要改善这个正则表达式的情况下,有多个字段中的值。REGEXP BINARY SQL语法问题

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

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

回答

-1
$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) 
} 
+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 – shai

+0

SELECT * FROM表WHERE列REGEXP BINARY'{“id”:“2”,“value”:\ [[0-9“,] *”4“[0-9”,] * \] }';假设4是你的价值 –

0

这里是一个正则表达式会做你想要的东西 - 但我有你的常识同意 - 存储JSON,然后用正则表达式来从中提取数据令人恶心

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