我使用以下查询
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我的脑子几乎关闭,所以如果我不够清楚,请原谅我。
答案 0 :(得分:1)
您需要使用否定的字符类而不是.*
,因为.*
是贪婪的,它尽可能匹配多个字符。
WHERE filters REGEXP '"job_skill":\{"label":"name","val":"[^\{\}]*(\[\[3D Designer\]\])'
[^\{\}]*
匹配任何字符,但不匹配{
或}
,不等于零。或多次。