MYSQL:用户即时选择的 ORDER BY table

MYSQL: ORDER BY table selected on the fly by user

我有一个 table 这样的:

Table:列数

 col1   col2    col3    col4
------ ------  ------  -------
  1       2       5       8
  5       4       2       7
  5       3       7       4
  7       5       4       1

用户选择什么样的排序列非常重要,我尝试这样的事情:

    SELECT col1,Col2,Col3
    FROM Cols
    order by cast(:ORDER_ID_COL as integer)

    SELECT col1,Col2,Col3
    FROM Cols
    order by cast(:ORDER_ID_COL as varchar(20))

两者都没有错误,但 none 正确。

如有不妥之处,请赐教让我重回正轨。

试试 :::

DECLARE @OrderBy VARCHAR(10) = '/*Here, pass the column name(if multiple columns, pass column names separated by commas)*/'
DECLARE @SQLquery VARCHAR(MAX) = '    
SELECT col1,Col2,Col3
FROM Cols
order by ' + @OrderBy

EXEC (@SQLquery)

当您将 :ORDER_ID_COL 传递给 sql 时,它将被视为一个值而不是列,因此它不会产生您想要的顺序,换句话说,您的查询如下所示:

SELECT col1,Col2,Col3
FROM Cols
order by 'col1'

你可以使用一种丑陋的方式来做到这一点:

SELECT col1,Col2,Col3
FROM Cols
order by case when :ORDER_ID_COL = 'col1' then col1
              when :ORDER_ID_COL = 'col2' then col2
              when :ORDER_ID_COL = 'col3' then col3
              when :ORDER_ID_COL = 'col4' then col4
         end

或使用动态sql:

SET @sql = concat('select col1,Col2,Col3 from cols order by ', :ORDER_ID_COL);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;