2011-12-18 10 views
7

पर आधारित संग्रहीत प्रक्रिया में गतिशील रूप से क्वेरी स्ट्रिंग का निर्माण करना उद्देश्य इनपुट चर के आधार पर एक MySQL संग्रहित प्रक्रिया के भीतर एक क्वेरी स्ट्रिंग को परिवर्तित करना है।MySQL गतिशील

कुछ इस तरह:

CREATE DEFINER=`root`@`localhost` PROCEDURE `func`(type VARCHAR(15)) 
BEGIN 
    SET @type = type; 

    -- Check for the sort parameter 
    if @type="asc" THEN 
     SET @sort = " order by name asc"; 
    elseif @type="desc" THEN 
     SET @sort = " order by name desc"; 
    else 
     SET @sort =""; 
    end if; 

SELECT id, name from table @sort; 

END  
+1

समाधान पर अमल उपयोग करने के लिए है, और concat: बनाएं Definer = 'root' @ 'लोकलहोस्ट 'प्रक्रिया' परीक्षण '(इनपुट VARCHAR (15)) BEGIN एसईटी @ इनपुट = इनपुट; यदि @ इनपुट = "आरोही" तो एसईटी @sort = "गतिविधिLogKey asc द्वारा आदेश"; elseif @input = "desc" तो SET @sort = "ActivityLogKey desc द्वारा ऑर्डर"; अन्य SET @sort = ""; अंत में; एसईटी @query = CONCAT ('गतिविधि * से चुनें *, @ सॉर्ट,' सीमा 0, 5 '); @query से stmt तैयार करें; निष्पादित करें; डीलॉकेट तैयार करें; END –

+0

यदि यह समाधान है तो आपने इसे उत्तर के रूप में क्यों नहीं जोड़ा और इसे स्वीकार कर लिया या इसके साथ अपना प्रश्न संपादित नहीं किया। –

+0

100 प्रतिष्ठा के बिना, मुझे अपने प्रश्न का उत्तर देने के लिए 8 घंटे का इंतजार करना है –

उत्तर

13

समाधान पर अमल उपयोग करने के लिए है, और concat:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(input VARCHAR(15)) 
BEGIN 
SET @input = input; 

if @input="asc" then 
    SET @sort = " order by ActivityLogKey asc"; 
elseif @input = "desc" then 
    SET @sort = " order by ActivityLogKey desc"; 
else 
    SET @sort =""; 
end if; 

SET @query = CONCAT('select * from activitylog ',@sort,' limit 0, 5'); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END 
+0

इसके लिए मुझे मिली उपयोगीता PHP में बजाए संग्रहीत प्रो के हिस्से के रूप में सशर्त रूप से जुड़ने, फ़ील्ड या किसी अन्य SQL कोड को सम्मिलित करने में सक्षम होना है। संग्रहीत प्रो स्तर पर इसे लागू करने के लिए यह बहुत साफ लगता है। –

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