Mysql 有没有办法在游标声明的ORDERBY子句中包含一个变量?

Mysql 有没有办法在游标声明的ORDERBY子句中包含一个变量?,mysql,sql,stored-procedures,cursor,sql-order-by,Mysql,Sql,Stored Procedures,Cursor,Sql Order By,我希望能够在游标声明的ORDERBY子句中使用参数变量。我正在使用MySQL 5.5.21。这是我试图使用的代码。没有错误,但是输出没有按照我在参数中提供的列进行排序 CREATE PROCEDURE getData(IN start_id INT, IN end_id INT, IN col_sort VARCHAR(16), IN max_date DATE) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE id_num INT;

我希望能够在游标声明的ORDERBY子句中使用参数变量。我正在使用MySQL 5.5.21。这是我试图使用的代码。没有错误,但是输出没有按照我在参数中提供的列进行排序

CREATE PROCEDURE getData(IN start_id INT, IN end_id INT, IN col_sort VARCHAR(16), IN max_date DATE)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE id_num INT;
    DECLARE rid_num LONG;
    DECLARE cur1 CURSOR FOR SELECT `ID`,`rid` FROM `clients` WHERE `rid` > 0 AND `date_live` < max_date ORDER BY col_sort LIMIT start_id, end_id;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur1;
(etc.)
CREATE PROCEDURE getData(在start\u id INT、end\u id INT、col\u sort VARCHAR(16)、max\u date中)
开始
声明done INT DEFAULT FALSE;
声明id_num INT;
声明rid_num LONG;
声明cur1游标,从'clients'中选择'ID','rid',其中'rid`>0和'date\u live`

我很好奇这是否能做到。我不想为每个可能的列定义多个存储过程。提前感谢。

输出按您提供的输入进行排序,即字符串值,实际上根本不排序,因为所有行都获得相同的值

您需要一个
案例
来按不同的列进行排序:

order by case col_sort
  when 'col1' then col1
  when 'col2' then col2
  when 'col3' then col3
end
当然,这需要所有列都具有相同的数据类型。如果您有不同的数据类型,那么每个数据类型都需要一个
case


另一种选择是通过连接字符串来创建SQL,然后执行该操作。

输出按您提供的输入排序,即字符串值,由于所有行都获得相同的值,因此实际上根本不排序

您需要一个
案例
来按不同的列进行排序:

order by case col_sort
  when 'col1' then col1
  when 'col2' then col2
  when 'col3' then col3
end
当然,这需要所有列都具有相同的数据类型。如果您有不同的数据类型,那么每个数据类型都需要一个
case


另一种方法是通过串接字符串创建SQL,然后执行它。

Cool!我没想到用箱子,酷!我没想到用箱子。