MySQL按指定順序排序(order by field的使用)

burndust發表於2024-05-28

新建t表

CREATE TABLE `t` (
  `id` int NOT NULL AUTO_INCREMENT,
  `c` int DEFAULT NULL,
  `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

存入資料

INSERT INTO `test`.`t` (`id`, `c`, `name`) VALUES (1, 0, 't');
INSERT INTO `test`.`t` (`id`, `c`, `name`) VALUES (2, 1, 't');
INSERT INTO `test`.`t` (`id`, `c`, `name`) VALUES (3, 2, 't');
INSERT INTO `test`.`t` (`id`, `c`, `name`) VALUES (4, 3, 't');
INSERT INTO `test`.`t` (`id`, `c`, `name`) VALUES (5, 4, 't');

c列0表示不做限制,需要將其排在最前面,並按c列由高到低排序,網上查到的大部分都是先按一列指定排序,再按另一列進行排序,與這裡的需求不太一樣。sql如下

SELECT * FROM `t` order by FIELD(c, 0, c), c desc;

結果為

1	0	t
5	4	t
4	3	t
3	2	t
2	1	t

相關文章