2015-03-19 5 views
5

मेरे पास MySQL में एक टेबल है जिसमें एक कॉलम है जो JSON ऑब्जेक्ट्स को संग्रहीत करता है। मैं आसानी से क्वेरी कैसे चला सकता हूं जिसमें WHERE क्लॉज में कुछ JSON फ़ील्ड हो सकते हैं?MySQL में क्वेरी कैसे लिख सकते हैं जो JSON डेटा को कॉलम में पार्स कर सकते हैं?

पूर्व: articles

+----+---------+--------------------------------------------------------------------------------------------------+ 
| id | user_id | json_data                      | 
+----+---------+--------------------------------------------------------------------------------------------------+ 
| 1 |  1 | {"url":"https://www.cpubenchmark.net/","title": "CPU Benchmarks"}        | 
| 2 |  1 | {"url":"http://www.ebay.com/sch/CPUs-Processors-/164/i.html","title": "Computer and Processors"} | 
| 3 |  2 | {"url":"https://www.youtube.com/watch?v=tntOCGkgt98","title": "Funny Cats Compilation"   | 
+----+---------+--------------------------------------------------------------------------------------------------+ 

नामित मैं की तरह कुछ लिखने के लिए सक्षम होना चाहते हैं एक मेज के साथ:

SELECT user_id, json_data FROM articles WHERE json_data.title LIKE "%CPU%" 

यह केवल पहली पंक्ति लौटना चाहिए।

+0

यह मदद कर सकता है http://stackoverflow.com/questions/26670022/mysql-udf-json-extract- इन-जहां-क्लॉज-कैसे-सुधार-प्रदर्शन –

+0

MySQL 'common_schema' –

उत्तर

0

निम्न क्वेरी करें और देखें कि यह आपकी आवश्यकताओं फिट बैठता है:

SELECT user_id, json_data 
FROM articles 
WHERE common_schema.extract_json_value(json_data,'title') 
LIKE "%CPU%" 

यह केवल MySQL संस्करण 5.1 या नए पर काम करेंगे।

+0

का उपयोग करें हम = = 5.5 का उपयोग करते हैं। मुझे मिलता है: 'Function common_schema.extract_json_value मौजूद नहीं है'। मुझे लगता है कि मुझे स्थापित करने की आवश्यकता है: https://code.google.com/p/common-schema/ - मैं वास्तव में एक और प्लगइन की तलाश शुरू कर दिया। –

1

मैं इस तरह से हल करने के लिए समाप्त हुआ: https://github.com/ChrisCinelli/mysql_json एक यूडीएफ के साथ। मैंने विस्तृत किया कि इसे कैसे संकलित करें और इसे रीडमे में इंस्टॉल करें। यह MySQL 5.5

साथ gcc version 4.6.3 पर Ubuntu 12.04.5 पर मेरे लिए काम करता है आप को चलाने के लिए सक्षम हो जाएगा:

SELECT json_get('{"a":1}', 'a')  => 1 
SELECT json_get('{"a":1}', 'b')  => NULL 
SELECT json_get('[1,2,3]', 2)   => 3 
SELECT json_get('{"a":[2]}', 'a', 0) => 2 

#Also: 

SELECT json_get('{"a":{"b":2}}', 'a') => object 
SELECT json_get('{"a":[1,2,3]}', 'a') => array 

# Verify if it is a valid JSON: 

SELECT ISNULL(json_get('{"a":1}')); => 0 # Valid 
SELECT ISNULL(json_get('{"a":1')); => 1 # Invalid 

# Create an example table: 

CREATE TABLE `message` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data` text, 
    PRIMARY KEY (`id`) 
); 
INSERT INTO message (id,data) VALUES(1,'{"from":"chris","title":"Awesome Article","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}'); 
INSERT INTO message (id,data) VALUES(2,'{"from":"loren","title":"Another Article","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}'); 
INSERT INTO message (id,data) VALUES(3,'{"from":"jason","title":"How to run a query","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}'); 

# Run queries on JSON values: 

SELECT json_get(data,'title') FROM message WHERE id=2; 
SELECT id,data FROM message WHERE json_get(data,'from')='chris'; 
SELECT id,data FROM message WHERE json_get(data,'title') LIKE '%Article%'; 
+0

कोई भी जानता है कि मरियादब इसका समर्थन करता है या नहीं? – Praesagus

+0

मेरे पास 5.5.14 है और फ़ंक्शन json_get मौजूद नहीं है –

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

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