sql 存储过程排序问题

sql stored procedure order-by issue

当我尝试使用 mysql 命令行调用此过程时,我有以下简单的存储过程,它 returns 总是以升序排列。

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
//

我这里做错了什么。

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

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

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