gpt4 book ai didi

php - 从小到大排序

转载 作者:行者123 更新时间:2023-11-29 03:51:22 26 4
gpt4 key购买 nike

我在 mytable 中有一个字段容量。

我想按容量从小到大对fetch数据进行排序

这些值是

6" x 12"
6" x 12"
6" x 18"
6" x 12"
10" x 20"
12" x 24"

我想要这个结果

6" x 12"
6" x 12"
6" x 12"
6" x 18"
10" x 20"
12" x 24"

如果我使用这个查询

select * from mytable order by capacity ASC

结果是

10" x 20"
12" x 24"
6" x 12"
6" x 12"
6" x 12"
6" x 18"

如果我使用这个查询

select * from mytable order by capacity + 0 ASC

结果是

6" x 12"
6" x 12"
6" x 18"
6" x 12"
10" x 20"
12" x 24"

最佳答案

这是一个非常糟糕的表格架构。最好的方法是创建一个表格,将它们()分成两列:宽度高度。例子,

CREATE TABLE Dimension
(
ID INT AUTO_INCREMENT,
`Width` INT,
`Height` INT,
CONSTRAINT tb_pk PRIMARY KEY (ID)
);

然后你现在可以像这样插入你的记录了,

INSERT INTO Dimension (`Width`, `Height`) VALUES (6, 12), (6,18), (10, 12);

然后简单地使用这个查询来排序结果

SELECT *
FROM Dimension
ORDER BY (`width` * `height`) DESC

但要在不更改架构的情况下回答您的问题,请在您的服务器中创建一个USER DEFINE FUNCTION

CREATE FUNCTION SPLIT_STR
(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');

然后使用这个查询,

SELECT CAST(SPLIT_STR(REPLACE(`capacity`, '"', '') ,'x', 1) as SIGNED) width,
CAST(SPLIT_STR(REPLACE(`capacity`, '"', '') ,'x', 2) as SIGNED) height
FROM tableName
ORDER BY (width * height) DESC

SQLFiddle Demo

关于php - 从小到大排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com