我想在很多地方按1、1a,1b,2、2a,2b,...的顺序订购东西。我正在考虑以下选项:

1:将枚举字段用于1、1a,1b,2、2a,2b ...,以便其排序良好。缺点是在不同的地方定义了这样的枚举。

2:创建一个具有两个字段的额外表。一个字符串字段,其值分别为1、1a,1b,2、2a,2b,...,并且在需要排序的任何地方都具有该表的订单索引和联合。缺点是很多工会。

您会建议哪些选择,或者您考虑其他选择?

谢谢

最佳答案

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,string VARCHAR(12) NOT NULL);

INSERT INTO my_table (string) VALUES ('2b'),('1'),('2a'),('1b'),('1a'),('11');

SELECT * FROM my_table;
+----+--------+
| id | string |
+----+--------+
|  1 | 2b     |
|  2 | 1      |
|  3 | 2a     |
|  4 | 1b     |
|  5 | 1a     |
|  6 | 11     |
+----+--------+

SELECT * FROM my_table ORDER BY string + 0,string;
+----+--------+
| id | string |
+----+--------+
|  2 | 1      |
|  5 | 1a     |
|  4 | 1b     |
|  3 | 2a     |
|  1 | 2b     |
|  6 | 11     |
+----+--------+

关于mysql - 自定义订购SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34722982/

10-11 22:32