2015-04-08 3 views
0

Я использую следующий запросMysql REGEXP возвращает true, хотя совпадения нет.

SELECT u.id 
FROM users u 
INNER JOIN user_widgets uw ON uw.user_id = u.id 
WHERE filters REGEXP '"job_skill":\{"label":"name","val":".*(\[\[3D Designer\]\])' 

На этом поле

{"job_skill":{"label":"name","val":"[[Web]]"},"country":{"label":"name","val":"[[Jordan]],[[Syria]]"},"city":{"label":"name","val":""}} 

Этот запрос работает очень хорошо для моих нужд, но и для некоторых странных причин, она возвращает user_id, даже если поле явно Безразлично 't содержат это значение, это 3:36 утра, и мой мозг почти закрывается, поэтому, пожалуйста, извините меня, если я не достаточно ясен.

+1

попробуйте этот 'WHERE фильтр REGEXP '" job_skill ": \ {" label ":" name "," val ":" [^ \ {\}] * (\ [\ [3D Designer \] \])' ' –

+0

@AvinashRaj благодарю вас, ваше творение души, пожалуйста, поставьте его как ответ, чтобы я мог выбрать его в качестве правильного ответа. –

ответ

1

Вам нужно использовать класс символов с отрицанием вместо .*, потому что .* является жадным, который соответствует как можно большему количеству символов.

WHERE filters REGEXP '"job_skill":\{"label":"name","val":"[^\{\}]*(\[\[3D Designer\]\])' 

[^\{\}]* соответствует любому символу, но не { или }, ноль или более раз.

Смежные вопросы