मेरे पास JSON_ARRAY कॉलम के साथ एक साधारण तालिका है:

+----+---------+
| id | content |
+----+---------+
|  1 | [3, 4]  |
|  2 | [5, 6]  |
+----+---------+

मैं एक विशिष्ट आईडी के लिए सभी सामग्री संदर्भों को सूचीबद्ध करना चाहता हूं

SELECT JSON_EXTRACT(content, '$') as res FROM table WHERE id=1

लेकिन मैं परिणाम पंक्तियों में होना चाहता हूं:

+-----+
| res |
+-----+
|  3  |
|  4  |
+-----+
5
Jibeji 16 फरवरी 2020, 17:46
क्या इससे आपके सवाल का जवाब मिलता है? JSON सरणी को MySQL में पंक्तियों में बदलें
 – 
Nico Haase
16 फरवरी 2020, 17:50
दुर्भाग्य से नहीं, क्योंकि मेरा कॉलम एक साधारण सरणी है, न कि किसी इंडेक्स के साथ JSON
 – 
Jibeji
16 फरवरी 2020, 17:54
कृपया पढ़ें डेटाबेस कॉलम में सूची वास्तव में खराब है"> stackoverflow.com/questions/3653462/… उस cmma सेपरेटेड स्ट्रिंग को विभाजित करने की संभावना है, आप यहां SO में कुछ उदाहरण पा सकते हैं
 – 
nbk
16 फरवरी 2020, 18:10
मैं उत्सुक हूं, जब आप चाहते हैं कि प्रत्येक मान अपनी पंक्ति पर हो, तो आपने इन मानों को JSON सरणी में क्यों संग्रहीत किया?
 – 
Bill Karwin
16 फरवरी 2020, 19:56
बस मौजूदा डेटाबेस मॉडल से निपटना :(
 – 
Jibeji
16 फरवरी 2020, 21:43

2 जवाब

सबसे बढ़िया उत्तर

आप इसे MySQL 8.0 में JSON_TABLE():

select r.res from mytable, 
 json_table(mytable.content, '$[*]' columns (res int path '$')) r 
where mytable.id = 1

मैंने MySQL 8.0.17 पर परीक्षण किया, और यह आउटपुट है:

+------+
| res  |
+------+
|    3 |
|    4 |
+------+

यदि आप MySQL 8.0 से पुराने संस्करण का उपयोग करते हैं, तो आपके पास ये विकल्प हैं:

  • कुछ असंभव जटिल SQL समाधान खोजें। समस्या को हल करने का यह लगभग हमेशा गलत तरीका है, क्योंकि आप कोड के साथ समाप्त होते हैं जो बनाए रखने के लिए बहुत महंगा है।
  • जेएसओएन सरणी को यथावत प्राप्त करें, और इसे एप्लिकेशन कोड में विस्फोट करें।
  • अपने डेटा को सामान्य करें ताकि आपके पास JSON सरणियों का उपयोग करने के बजाय प्रति पंक्ति एक मान हो।

मुझे अक्सर स्टैक ओवरफ़्लो पर MySQL में JSON का उपयोग करने के बारे में प्रश्न मिलते हैं जो मुझे विश्वास दिलाते हैं कि इस सुविधा ने MySQL को बर्बाद कर दिया है। डेवलपर इसका गलत इस्तेमाल करते रहते हैं। उन्हें यह पसंद है कि यह अर्ध-संरचित डेटा को सम्मिलित करना आसान बनाता है, लेकिन वे पाते हैं कि यह उस डेटा की क्वेरी को बहुत जटिल बना देता है।

6
Bill Karwin 16 फरवरी 2020, 19:53

वह एक बुरा विचार था। मैं इसे हल करने के लिए PHP के साथ एक json_decode() करूँगा। धन्यवाद दोस्तों।

0
Jibeji 16 फरवरी 2020, 21:42