2012-10-29 16 views
26

चलें कहते हैं कि मैं एक सपा इस प्रकार एक SELECT बयान है कि है,एक चर को एक खंड में कैसे पास किया जाए?

SELECT product_id, product_price FROM product 
WHERE product_type IN ('AA','BB','CC'); 

लेकिन डेटा चला जाता है कि IN खंड एक एकल चर कि मूल्यों की स्ट्रिंग के माध्यम से किया जाना चाहिए।

SELECT product_id, product_price FROM product 
WHERE product_type IN (input_variables); 

से नीचे कुछ लिंक लेकिन यह इस तरह से काम नहीं कर रहा है। कोई आईडिया कि इसे कैसे किया जाए?

+3

कहां से 'input_variables' आ रहा है? 'php?' –

+0

यह वास्तव में एक क्रॉन नौकरी से प्रत्यक्ष MYSQL निष्पादित करता है, इसलिए यह एसपी के इनपुट पैरामीटर में से एक है। उपयोगकर्ता उन्हें प्रवेश करता है इस पर निर्भर करता है कि वे किस डेटा को चाहते हैं। – Thanu

+1

तो आपका मतलब है कि यह एक एकल चर में अल्पविराम से अलग मूल्य है? –

उत्तर

38

पास पैरामीटर मान - 'AA,BB,CC'। फिर, यह FIND_IN_SET समारोह का उपयोग करने के लिए पर्याप्त है -

SELECT product_id, product_price 
FROM product 
WHERE FIND_IN_SET(product_type, param); 
+0

यह काम करता है !! – danielad

+0

@ डैनियलड वेलकम) – Devart

+3

इससे क्वेरी बिना इंडेक्स के सभी टेबल पर चलने का कारण बन जाएगा। मजबूत भी नहीं सोचा कि यह एक वैध जवाब है –

3

उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन बनाएं जो अल्पविराम से अलग मूल्य को तालिका में परिवर्तित कर देगा, और इन दोनों में शामिल होने से वांछित परिणाम प्राप्त हो सकते हैं।

for more

2

एक स्ट्रिंग एक चर एक समस्या उपयोग कर रहा था गुजर इस समाधान

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTestListValues`(_list varchar(200)) 
BEGIN 
     SET @LIST=_list; -- assume this a paramter from the stored procedure 
    SELECT NULL AS Id, '' AS Description --insert null value to be used for list box population 
    UNION 
    (SELECT id, Description 
    FROM test_table 
    WHERE FIND_IN_SET(id,@LIST) ORDER BY Description ASC) ; 

END 

अन्य क्वेरी खिड़की से प्रक्रिया कॉलिंग मान

call `spTestListValues`('4,5,3'); --no paramter currently for test 

आउटपुट

ID Description 
NUll 
1 TEST1 
4 TEST2 
5 TEST3