sql存储过程order-by问题

时间:2015-03-13 15:50:51

标签: mysql sql stored-procedures

当我尝试使用mysql命令行调用此过程时,我有以下简单的存储过程,它始终以升序返回结果。

DELIMITER //
CREATE PROCEDURE `activity_pagin_desc`(
    IN `payload_context_id` VARCHAR(50),
    IN `tenant_domain` VARCHAR(100),
    IN `order_val` VARCHAR(50),
    IN `lim_val` INT,
    IN `lim_offset` INT
)
BEGIN
  SELECT *
    FROM SOCIAL_COMMENTS
    WHERE payload_context_id=payload_context_id AND tenant_domain=tenant_domain
    ORDER BY order_val DESC
    LIMIT lim_val OFFSET lim_offset;
END
//

我在这里做错了什么。

1 个答案:

答案 0 :(得分:3)

那是因为order_val是常数。所以,升序或降序并不重要。您可以使用动态SQL或多个case语句:

order by (case when order_val = 'col1' then col1 end),
         (case when order_val = 'col2' then col2 end),
         . . .

多个case语句很有用,因为无论引用的列的类型如何,逻辑都将起作用。