2011-09-29 9 views
5

PHP कैसे mysql के माध्यम से जेसन डेटा को स्टोर और पढ़ा जाए?PHP कैसे mysql के माध्यम से जेसन डेटा को स्टोर और पढ़ा जाए?

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))"); 

फिर, data मूल्य कैसे अपडेट करें? डेटा को पढ़ें, फिर इसे json_encode और डीकोड प्रक्रिया के साथ डालें, या केवल आसान तरीका अपडेट करें?

[{"id": "1", "value": "yes"}] 

तो [{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}] के लिए एक और परिवर्तन डालने ...

या एक लंबे लंबे मूल्य भले ही।

[{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"}]

फिर एक और अपडेट करते हैं, [{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"},{"id": "10001", "value": "yes"}]

मैं पूछने के लिए करना चाहते हैं के लिए बदलने के लिए, कैसे और अधिक समझदार और कुशलता से इस mysql क्वेरी प्रोसेसिंग करना है? अधिक सुझाव के लिए धन्यवाद।

उत्तर

22

तकनीकी रूप से, आप इसके साथ गलत तरीके से जा रहे हैं। MySQL का उपयोग आपकी प्रत्येक आईडी/VALUE को अलग से स्टोर करने के लिए किया जाता है। अपना कोड नहीं बदलने के लिए हम पहले आपके समाधान को देखेंगे, लेकिन फिर मैं इसे करने का "बेहतर" तरीका समझाऊंगा। यह पहला भाग आप पर करने की अनुमति देगा

mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(json_encode('id' => $uid, 'value' => yes)).")");

बजाय

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");

:

सबसे पहले, आप एक चर, नहीं अपने एसक्यूएल के तहत आपके JSON बनाने की जरूरत है कम से कम डेटा mysql में सही ढंग से। मैं अपनी मेज एक आईडी है और आप इसे का उपयोग किया जाएगा अपडेट करने या हटाने के लिए

आप अपने डेटा जब पुनः प्राप्त, आप $ पंक्ति [ 'डेटा'] json_decode कर सकते हैं अपने डेटा पंक्ति से वापस पाने के लिए मान रहा हूँ कि और इसके साथ काम करते हैं। इसे अद्यतन करने के लिए, बस करो:

mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)

अब, ऐसा करने के लिए सही रास्ता के लिए:

यह करने के लिए अपने तालिका में इन क्षेत्रों के लिए किया जाएगा सही तरीके: आईडी, JSONID, JSONVALUE और इसके बजाय इस एसक्यूएल का उपयोग करें:

SELECT * FROM text WHERE id = $rowid INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue) UPDATE text SET jsonid = $jsonid, jsondata = $jsondata

यह सुंदर बुनियादी है, लेकिन यह है कि आप अपने databas में प्रविष्टियों की किसी भी संख्या के लिए अनुमति देगा ई जो इसे खोजने योग्य, अनुक्रमित, क्रमबद्ध, क्वेरी करने योग्य, आदि बनाते हैं ...

+7

+1। – Herbert

+1

मेरा मानना ​​है कि आपके पहले कोड उदाहरण में एक अतिरिक्त एकल उद्धरण है – CervEd

2

आप जेएसओएन को एक ही फ़ील्ड में संग्रहीत न करके इसे और अधिक कुशलता से कर सकते हैं लेकिन JSON ऑब्जेक्ट के प्रॉपर्टी नामों के साथ फ़ील्ड नामों के साथ उचित MySQL तालिका बनाकर।

किसी डेटाबेस में आपके डेटा के टेक्स्ट-स्ट्रिंग एन्कोडेड प्रस्तुति को संग्रहीत करना पूरी तरह से डेटाबेस का उपयोग करने के बिंदु को पूरी तरह से नष्ट कर देता है।

+0

MongoDb एक बाइनरी JSON स्टोरेज प्रारूप का उपयोग करता है। तो मुझे आपके दूसरे बिंदु से असहमत होना होगा कि JSON में डेटा संग्रहीत करना एक बुरा विचार है। MySQL (और अन्य एसक्यूएल संक्रमण) के लिए, आपका बिंदु मान्य है। –

+1

प्रश्न (और मेरा उत्तर) विशेष रूप से MySQL के बारे में है, और JSON स्ट्रिंग के रूप में एन्कोड किए गए डेटा को संग्रहीत करता है। इसके अलावा, जैसा कि आपने स्वयं कहा था, मोंगोडीबी "JSON" को बाइनरी ऑब्जेक्ट्स के रूप में स्टोर करता है, जेएसओएन स्ट्रिंग्स के रूप में नहीं, इसलिए मोंगो डीबी में "JSON" संग्रहीत करना स्ट्रिंग के रूप में एन्कोड किए गए डेटा को संग्रहीत नहीं कर रहा है (जो अभी भी खराब अभ्यास है और ब्रेक [डेटाबेस सामान्यीकरण] (http : //en.wikipedia.org/wiki/Database_normalisation))। ओपी के अनुरोध को देखने और सही तरीके से दिखाने के लिए – megaflop

2

हां लेकिन .... वर्डप्रेस उपयोगकर्ता क्षमताओं जैसे कि JSON तारों को एन्कोड किए गए अपने डेटा को संग्रहीत करता है।एक सरणी को डेटा के एक अलग बिट के रूप में संग्रहीत करने से डेटाबेस पर एकाधिक पढ़ना पड़ता है और आपको एक पढ़ने पर बहुत अधिक डेटा प्राप्त करने की अनुमति मिलती है। यदि आप JSON स्ट्रिंग के अलग-अलग हिस्सों को चुनने की आवश्यकता को कभी नहीं देखते हैं तो मुझे नहीं लगता कि यह ऐसा करने के लिए स्वीकार्य क्यों नहीं है। MySQL को भी ऐसा सोचना चाहिए क्योंकि यदि आप चाहें तो JSON स्ट्रिंग के भीतर अलग-अलग फ़ील्ड पर एक SELECT को अनुमति देने के लिए फ़ंक्शन हैं (MySQL EXPLAIN कीवर्ड देखें)। लेकिन मैं सहमत हूं कि यदि आप किसी क्षेत्र में बहुत से चयन करने जा रहे हैं तो इसमें से एक होना चाहिए। यह सब इस बात पर निर्भर करता है कि आप डेटा का उपयोग कैसे करेंगे।

+0

वर्डप्रेस जेसन स्ट्रिंग्स के रूप में बहुत से डेटा को स्टोर नहीं करता है, वह आंतरिक धारावाहिक/अनसुलझा तंत्र का उपयोग करता है :) –

+0

@ मैथियू - मैंने कहा कि यह "जेएसओएन एन्कोड किया गया" जिसका अर्थ है informialize/unserialize का उपयोग कर। MySQL में EXPLAIN कीवर्ड पर एक नज़र डालें। – KoZm0kNoT

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