Mysql 有没有办法在游标声明的ORDERBY子句中包含一个变量?
我希望能够在游标声明的ORDERBY子句中使用参数变量。我正在使用MySQL 5.5.21。这是我试图使用的代码。没有错误,但是输出没有按照我在参数中提供的列进行排序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;
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!我没想到用箱子,酷!我没想到用箱子。