क्या MySQL संग्रहीत प्रक्रियाओं में कोई सूची डेटाटाइप है, या उन्हें अनुकरण करने का एक तरीका है?

मैं MySQL में संग्रहीत प्रक्रिया बनाना चाहता हूं जिसने एक सूची तर्क के रूप में ली है। उदाहरण के लिए, कहें कि मैं एक कॉल में किसी आइटम के लिए एकाधिक टैग सेट करने में सक्षम होना चाहता हूं, फिर मैं जो करना चाहता हूं वह उस प्रक्रिया को परिभाषित करना है जो आइटम की आईडी लेता है और टैग की एक सूची सेट करता है। हालांकि, मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है, जहां तक ​​मुझे पता है, कोई सूची डेटाटाइप नहीं है, लेकिन क्या इसे किसी भी तरह नकल किया जा सकता है? टैग की सूची अल्पविराम से अलग स्ट्रिंग हो सकती है, जिसे किसी भी तरह विभाजित और लूप किया जा सकता है?

आप आमतौर पर MySQL संग्रहीत प्रक्रियाओं में सूचियों के साथ कैसे काम करते हैं?

0
ro fr bn

4 उत्तर

चॉइस, सी # की मेरी प्रोग्रामिंग भाषा में, मैं वास्तव में एप्लिकेशन में ऐसा करता हूं क्योंकि विभाजित() फ़ंक्शंस और लूप सी # में एसक्यूएल के लिए आसान है, हालांकि!

शायद आपको SubString_Index() फ़ंक्शन पर देखना चाहिए।

उदाहरण के लिए, निम्नलिखित Google वापस आ जाएगा:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);
0
जोड़ा

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

  • अद्वितीय आईडी (guid)
  • ItemID

Psuedo-code इस तरह दिखता है:

GUID guid = GenerateGUID()
try
  for each customer in customerList { INSERT(guid, customerId) }
  ExecuteSQLPocedure(guid)
  --the procedure can inner-join to the list table to get the list
finally
  DELETE WHERE UniqueID=guid      
0
जोड़ा

This article has some good discussion on the problem of parsing an array to a stored procedure since stored procedures only allow valid table column data-types as parameters.

csv के साथ आप कुछ साफ-सुथरे चीजें कर सकते हैं MySQL में टेबल प्रकार - यह है कि यदि आप डीबी में एक फ्लैट फ़ाइल लोड कर रहे हैं।

आप संग्रहित प्रक्रिया में एक अस्थायी तालिका बना सकते हैं, सीएसवी सूची पर फिर से भरें और इसे temp तालिका में डालें, फिर उस कर्सर को बनाएं जो उस तालिका के मानों का चयन करता हो। उपर्युक्त धागे में यह उत्तर का एक तरीका दिखाता है यह कर रहा हूं।

आम तौर पर मैं डेटाबेस में आने से पहले सरणी को विभाजित करता हूं और फिर प्रत्येक आइटम पर व्यक्तिगत रूप से क्वेरी निष्पादित करता हूं।

0
जोड़ा

Not sure if these will work specifically in a SP, but there are ENUM and SET datatypes in MySQL 5 which may do what you need. http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html

0
जोड़ा
enums और सेट केवल तारों पर लागू होते हैं। enums केवल एक मान से एक मान की अनुमति देता है, इसलिए मानों की एक चर संख्या की अनुमति न दें। मुझे यह भी संदेह है कि एसईटी डाटाटाइप को संग्रहीत प्रक्रिया में पूर्वनिर्धारित किया जाना चाहिए, इसलिए सीमित उपयोग है (नहीं कि मैं इसे किसी भी तरह से काम कर सकता हूं ...)
जोड़ा लेखक beldaz, स्रोत