2010-02-02 15 views
7

मैं कुछ है कि मुझे इस बारी के लिए अनुमति देगा खोजने की उम्मीद में विभिन्न MySQL साइटों परिशोध किया गया है:MySQL स्प्लिट में उपयोग करने के लिए "का चयन करें जहां में" बयान

var parameters = "a,b,c,d"; // (Could be any number of comma-delimited values) 

इस में (यह मानते हुए मेरी पैरामीटर किसी भी तरह से इन ब्लॉक में देखे गए मान बन रहे हैं):

SELECT * FROM mytable WHERE parametertype IN('a', 'b', 'c', 'd'); 

लेकिन मुझे सफलता का कोई बड़ा सौदा नहीं है! मुझे मिली सबसे अच्छी साइट मिली है: dev.mysql.com, जो एक डिलीमीटर (',' मेरे मामले में) के आधार पर तारों के विभाजन पर चर्चा करता है, हालांकि इसने कोई जवाब नहीं बनाया है ...

क्या किसी को पता है इस संदर्भ में इस्तेमाल किए जा सकने वाले तारों के समूह में अल्पविराम-सीमित स्ट्रिंग को विभाजित करने का एक अच्छा तरीका?

+0

आप mysql के माध्यम से या सी # के माध्यम से स्ट्रिंग को विभाजित करना चाहते हैं? – tga

+0

हाय टीजीडफ्लाई, मैं ('ए', 'बी', 'सी') का उपयोग करने के लिए सी # से एसक्यूएल में "ए ',' बी ',' सी '' जैसे कुछ गुजर रहा हूं लेकिन निश्चित रूप से (सोड का कानून) जो काम नहीं करता है! आपके पत्राचार के लिए धन्यवाद! –

उत्तर

6

तो अमल यह सब लचीलापन आप की जरूरत नहीं हो सकता है, लेकिन MySQL FIND_IN_SET समारोह suffic हो सकता है ient। हालांकि तुलना में सेट में अधिकतम 64 मानों की हार्ड सीमा है।

उदाहरण के लिए: - अपने एक enum तरह-की

SELECT * 
FROM mytable 
WHERE FIND_IN_SET(parametertype, 'a,b,c,d') != 0 

यह एक इन-लाइन MySQL SET के उपयोग ('ए, बी, सी, डी') का एक उदाहरण है। यह एक संकेत हो सकता है कि यदि इनका उपयोग किया जा रहा है तो डेटा मॉडल के सामान्यीकरण के साथ कुछ ख़राब है। लेकिन, वे डेटाबेस के बाहर रहने वाली जटिल जानकारी के साथ जुड़ने के लिए, या (इस मामले में) को समाप्त करने के लिए आसान हो सकते हैं।

+0

शानदार उत्तर मार्टिन का उपयोग करें! मैं एक कहां खंड लागू करने के लिए कोशिश कर रहा था और पता लगाना क्यों यह काम नहीं कर रहा था एक सही मेस में अपने आप को मिल रहा है! आपका बहुत बहुत धन्यवाद! –

0

आप गतिशील एसक्यूएल


delimiter //; 
create procedure tst() 
begin 
prepare stmp from 'INSERT INTO LOGG SELECT PFILE_Filename FROM PFILE_FILE'; 
execute stmp; 
deallocate prepare stmp; 
end// 
delimiter ;// 

का उपयोग आप इस

आप एसक्यूएल क्वेरी

SELECT * FROM mytable WHERE parametertype IN(
का एक हिस्सा है की तरह कुछ करने के लिए कर सकते हैं तो आप इसे एक स्ट्रिंग "एक पैरामीटर के रूप में पारित 'एक' के साथ शामिल , 'बी', 'सी', 'डी' 'के रूप में ऊपर STMP में उदाहरण के लिए concat समारोह का उपयोग करने और STMP

+0

टीजीडफ्लाई, यह पीएफआईएलई क्या है? आपको परेशान करने के लिए खेद है! –

+0

यह सिर्फ एक एसक्यूएल आप इस स्ट्रिंग गतिशील अगर आप स्ट्रिंग पारित 'एक', 'बी' बना सकते हैं के रूप में एक पैरामीटर mysql एक स्ट्रिंग के रूप में पहचानता के रूप में स्ट्रिंग को क्रियान्वित करने का एक उदाहरण था, लेकिन यदि आप किसी अन्य स्ट्रिंग अंत के साथ इसमें शामिल होने अगर फिर अपने_स्ट्रिंग_नाम को निष्पादित करें इसे पैरामीटर की सरणी के रूप में पहचाना जाएगा – tga

+0

क्या यह मुझे SQL-इंजेक्शन के लिए खुला नहीं छोड़ता है? –

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

  • कोई संबंधित समस्या नहीं^_^