2011-03-02 10 views
6

के साथ फ़ील्ड खोजने के लिए MySQL क्वेरी यह मूल SQL के साथ पर्याप्त हो सकता है या इसे REGEXP की आवश्यकता हो सकती है लेकिन मैंने एक ईंट की दीवार मारा है।JSON स्ट्रिंग

मेरे डेटा (1 क्षेत्र में प्रत्येक) इन दो उदाहरणों की तरह JSON स्ट्रिंग में संग्रहीत है:

 
[{"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"% का उपयोग करके सबकुछ मेल खाता है। मैं प्रत्येक श्रेणी को वापस करने के लिए "id":"$var" से पूछताछ कर सकता हूं, फिर परिणाम प्राप्त करने के बाद इसे फ़िल्टर करने के लिए PHP का उपयोग करें, लेकिन डेटा काफी बड़ा हो सकता है और मुझे यकीन है कि यह एक SQL गुरु के लिए आसान है।

मेरे पास फ़ील्ड के प्रारूप को बदलने का विकल्प नहीं है, इसे JSON के रूप में रहना होगा।

किसी भी मदद की सराहना की! धन्यवाद।

उत्तर

14

मुझे लगता है कि मैंने इसका उपयोग करके इसे हल किया: AND extra_fields REGEXP '(.*"id":"2".*)("\[.*"1".*\]")'। यह नियमित अभिव्यक्ति के साथ क्या करना अधिक की तुलना में यह MySQL के साथ क्या करना है: पी

टिप्पणी: (मैं टिप्पणी बटन नहीं पा सके)
इस वाक्य रचना जब आप सीखते हैं कि "extra_fields" स्तंभ का नाम है स्पष्ट हो जाता है तालिका में

+0

आप होगा एक समान मुद्दे पर मेरी मदद करने में सक्षम? '' '(। * \ "रीटिकल। * \": \ "*।'। $ Reticle2। '। * \") "' 'मेरा' रेगेक्सपी 'जैसा दिखता है और इसके बाध्य करने के लिए पैरामीटर' रीटिकल ' । क्वेरी काम करता है लेकिन कोई परिणाम नहीं। – r3wt

+0

बस यह जोड़ना चाहते हैं कि इस तरह के प्रश्नों को अनुक्रमित नहीं किया जा सकता है, इसलिए यदि आप इसका उपयोग कर रहे हैं तो एक उच्च ट्रैफिक वेबसाइट में है, ऐसे कार्यान्वयन के परिणामस्वरूप बड़ी प्रदर्शन हिट हो सकती है। – Oddman

0

एसक्यूएल में यह वास्तव में सरल है, क्योंकि आपको केवल अंतिम उद्घाटन ब्रैकेट की पहचान करने की आवश्यकता है। यह आप सबस्ट्रिंग इंडेक्स के साथ कर सकते हैं।

हो सकता है कि अपनी मेज परीक्षण कहा जाता है, और स्ट्रिंग पाठ कहा जाता है के साथ अपने क्षेत्र - इस काम करना चाहिए

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

आप 2 अद्वितीय सीमांकक के बीच एक पाठ है, तो हो सकता है यू लगता है this tutorial उपयोगी

संबंधित मुद्दे