2016-03-27 6 views
12

मान लें कि मेरे पास एक JSON कॉलम है जिसका नाम डेटा कुछ mysql तालिका में है, और यह कॉलम एक एकल सरणी है। तो डेटा में उदाहरण हो सकता है: उदाहरण के लिए [1,2,3,4,5]। अब मैं उन सभी पंक्तियों का चयन करना चाहता हूं जिनमें डेटा कॉलम है, जहां इसके सरणी तत्वों में से एक 2 से अधिक है। क्या यह संभव है? मैं निम्नलिखित कोशिश की, लेकिन लगता है यह हमेशा सरणी में मानों यह बात लागू रहेगी:mysql में जेसन सरणी कैसे खोजें?

SELECT * from my_table where JSON_EXTRACT(data, '$[*]') > 2; 
+0

आप पोस्टग्रेस्क्ल में जेसन एरे खोज सकते हैं, आमतौर पर अन्य फ़ील्ड के रूप में, mysql में आपको mysql फ़ंक्शंस का उपयोग करना होगा जो आप यहां पा सकते हैं: https://dev.mysql.com/doc /refman/5.7/en/json-search-functions.html – Thresh

+0

धन्यवाद, लेकिन मुझे इन कार्यों का उपयोग करके जेसन सरणी खोजने का कोई तरीका नहीं मिला –

+0

दीन आप इसके लिए एक समाधान खोजने के लिए प्रबंधन करते हैं? –

उत्तर

1

एक संभव तरीका स्ट्रिंग मिलान के रूप में समस्या से निपटने के लिए है। JSON को स्ट्रिंग और मिलान करने के लिए कनवर्ट करें।

या आप JSON_CONTAINS का उपयोग कर सकते हैं।

+0

मुझे यकीन नहीं है कि स्ट्रिंग मिलान काम करेगा क्योंकि मैं न केवल समानता से अधिक की तुलना करना चाहता हूं, जो json_contains के लिए जाता है, यह सटीक रूप से खोजता है कार्यों की तुलना नहीं, शामिल हैं। –

0

मुझे नहीं पता कि हमें समाधान मिला है या नहीं। मैंने सरणी में पथ खोजने के लिए मारिया डीबी के साथ एक रास्ता पाया। उदाहरण के लिए, सरणी में [{ "id": 1}, { "id": 2}], मैं 2.

SELECT JSON_SEARCH('name_field', 'one', 2, null, '$[*].id') 
FROM name_table 

परिणाम के लिए आईडी बराबर के साथ पथ को खोजने चाहते हैं:

"$[1].id" 

तारांकन पूरे सरणी को खोजने का संकेत देता है

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