2016-03-04 24 views
1

我是新來正則表達式,我已經存儲在表中的JSON數據。我想根據userId獲取數據,userId是Users對象的屬性。如何使用正則表達式在mysql中搜索JSON數據

例如:我想獲取所有記錄,如果用戶包含513

我的表中的數據樣本:

Table name:share 

Id name   sharedusers 
1 xxxx   {"accessType":0,"permission":"1","specificUsers": 
        [{"users":"502,512,513","permission":"1"}]} 

2 yyy    {"accessType":0,"permission":"1","specificUsers": 
        [{"users":"47,52,60","permission":"1"}]} 

3 zzzz   {"accessType":0,"permission":"1","specificUsers": 
        [{"users":"502,512,513","permission":"1"}]} 

我曾嘗試這個代碼,但我得到的所有記錄,過濾器不應用

SELECT * FROM share where sharedusers REGEXP '"users":"[[:<:]]513[[:>:]]"'; 

請給任何樣品。

+0

試試'REGEXP'「users」:「[^」] * [[:<:]]513[[:>:]]'' –

+0

太棒了,我發佈了一個解釋變化的答案。 –

回答

1

您可以使用

REGEXP '"users":"[^"]*[[:<:]]513[[:>:]]' 

這裏,[^"]*(比"其他0+字符),並最終"被去除,以有效地匹配513爲一對圍繞該值引號內整個單詞。

+0

如何將此('「users」:「[^」] * [[:<:]]513[[:>:]]')RegEx轉換爲定義正則表達式的字符串(例如'^ foo')。 正則表達式字面值(例如,/^foo /)。 正則表達式對象(例如,新的RegExp(/ John /))。 –

+0

如果你需要更多的細節,請看這個鏈接https://docs.strongloop.com/display/public/LB/Where+filter#Wherefilter-Regularexpressions –

+0

你的意思是你需要一個JavaScript兼容的正則表達式?使用'/「users」:「[^」] * \ b513 \ b /' –

0

升級到MySQL 5.7並使用內置函數來查詢JSON列。

+0

感謝您的回覆。我會嘗試。 –