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

解決策を実行に使用することであり、連結:このような

何か DEFINER = 'root'をCREATE @ 'localhost'プロシージャ' test'(入力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

これが解決策であれば、それを回答として追加して受け入れなかったのですが、それを受け入れるか、質問を編集してください。 –

+0

100の評判がなければ、私は自分の質問に答えるのに8時間待たなければならない。 –

答えて

13

解決策を実行に使用することで、連結:

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

私がこれで見つけた有用性は、ジョイント、フィールド、またはその他のSQLコードをPHPではなくストアドプロシージャの一部として条件付きで挿入できることです。 これをストアドプロシージャレベルで実装するのははるかにクリーンなようです。 –

関連する問題