2015-04-08 100 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不包含這個值,現在是凌晨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\]\])' 

[^\{\}]*匹配任何字符,但不是{},零次或多次。

相關問題