2011-12-18 16 views
7

temel alınarak depolanmış bir yordam oluşturmaktır. Amaç, giriş değişkenlerini temel alarak bir Mysql saklı yordamındaki bir sorgu dizesini değiştirmek. BöyleMysql, mantıksal olarak, mantıksal olarak mantıksal olarak mantıksal olarak

bir şey:

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

çözeltisi yürütmek kullanmaktır ve concat: Belirleyiciyi = 'root' CREATE @ localhost' PROCEDURE 'test' (giriş VARCHAR (15)) BEGIN SET @ giriş = giriş; @ input = "asc" ise SET @sort = "ActivityLogKey asc sırala"; elseif @input = "desc" o zaman SET @sort = "ActivityLogKey desc tarafından sipariş"; else SET @sort = ""; eğer; SET @query = CONCAT ('activitylog' dan select *, @ sort, 'limit 0, 5'); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt; END –

+0

Bu, yanıt olarak eklemediğin ve kabul etmediğin veya sorunuzu onunla neden değiştirmediğin çözümdür. –

+0

100 ün olmadan, kendi sorumu cevaplamak için 8 saat beklemem gerekiyor –

cevap

13

çözeltisi yürütmek kullanmaktır ve 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

Bunun için bulduğum yararlılık, birleştirilmiş olarak PHP'den ziyade depolanmış proc'un bir parçası olarak, birleşimleri, alanları veya başka bir SQL kodunu koşullu olarak ekleyebilmektir. Bunu saklanan proc seviyesinde uygulamak çok daha temiz görünüyor. –