我一直为这件事伤透了脑筋。如果我执行查询并使用“Order By 2;”例如,一切都按预期进行,数据在第 2 列上排序。一旦我将变量设置为 2 并将其用作“Order By @columnIndex;”数据未排序。如果我将 Order by 子句与 FIELD() 函数或 FIND_IN_SET() 函数一起使用,则数据不会排序。为什么?
突出我创建的快速表格。
CREATE TABLE `account` (
`id` int NOT NULL AUTO_INCREMENT,
`fullname` varchar(102) GENERATED ALWAYS AS (concat(`familyname`,_utf8mb4', ',`givenname`)) STORED,
`email` varchar(50) NOT NULL,
`suspended` tinyint DEFAULT '0',
`givenname` varchar(50) DEFAULT NULL,
`familyname` varchar(50) DEFAULT NULL,
PRIMARY KEY (`email`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `id_index` (`fullname`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 执行此查询不会对结果进行排序。 FIELD 函数返回索引 2。
选择
、id
、fullname
、FROMsuspended
按字段排序('全名', 'id','全名','电子邮件','暂停') DESCaccount
-- 执行此查询确实按预期对结果进行排序
从
中选择id
、fullname
、、suspended
按 2 个 DESC 排序account
我也尝试使用 FIND_IN_SET 函数解决此问题,但结果也未排序。
这可能与主键不是 id 或者生成的列有关吗?
有人可以向我解释一下我做错了什么吗?