2011-03-02 110 views
6

對於基本的SQL,這可能很簡單,或者可能需要REGEXP,但是我碰到了一堵磚牆。用JSON字符串搜索字段的MySQL查詢

我的數據被存儲在一個JSON字符串像這兩個例子(各在1場):

 
[{"id":"2","value":["1","3"]},{"id":"3","value":["1","2"]}] 

和:

 
[{"id":"3","value":["2"]},{"id":"3","value":["1","2","5"]}] 

我想在這些最後括號之間來搜索值其中可能包含許多數字["1","2","5"] or just a single on ["2"]。起始數字對應於2個類別 - 單個"id":"2""id":"3"

使用%"2"%與一個簡單的LIKE當然匹配的一切。我可以通過"id":"$var"查詢返回每個類別,然後使用PHP在獲得結果後對其進行過濾,但數據可能非常大,我確信對於SQL大師來說很容易。

我沒有選擇更改字段的格式,它必須保持爲JSON。

任何幫助表示讚賞!謝謝。

回答

14

我想我解決了這個問題:AND extra_fields REGEXP '(.*"id":"2".*)("\[.*"1".*\]")'。它更多的是用正則表達式比它做與MySQL:P

評論:(我找不到評論按鈕)
當你得知「extra_fields」是列名這句法逐漸明朗在表中

+0

你想成爲能夠幫助我解決類似的問題? ''「(。* \」Reticle。* \「:\」*。'。$ reticle2。'。* \「)」''是我的'REGEXP'的外觀,它的一個參數綁定':reticle' 。查詢有效,但沒有結果。 – r3wt 2015-03-19 06:09:23

+0

只是想補充一點,這些查詢不能編入索引,所以如果您使用的是高流量的網站,這樣的實現可能會導致很大的性能提升。 – Oddman 2015-09-18 07:49:50

0

在SQL中它非常簡單,因爲您只需要識別最後一個左括號即可​​。 這你可以做子字符串索引。

也許你的表稱爲測試,並與所謂的文本字符串你的領域 - 這應該工作

select text from (select substring_index(text,'[',-1) as text from test) as new where text like '%5%'** 

如果你有2個獨特的分隔符之間的文本,也許ü找到this tutorial有用