按超出范围的序号列排序

Order by ordinal column number that is out of range

可以按结果集中的列序号对 MySQL 结果进行排序,如下所示:

select id, firstname, lastname from customer order by 3,2

(按 lastname 排序,然后 firstname

但是,如果您指定了一个不存在的列编号,例如我的示例中的 4,则会出现错误:Unknown column '4' in 'order clause'

我有一些遗留的用户界面代码,其中从各种查询返回的列数事先并不知道。由于这段代码的结构,要添加一个排序工具,它​​会帮助我能够指定一个不存在的列号而不会出错。 (如果数字超出实际列范围,排序顺序无关紧要。)

有没有办法在 SQL 级别以某种方式做到这一点?也许是这样的:

order by min(3, number_of_columns_in_result_set)

不,这不可能。但是您可以将其包装在准备好的语句中并处理该子结果集(谢谢FaNo_FN)。