gpt4 book ai didi

php - Mysql varchar 字段的数字不能很好地排序

转载 作者:行者123 更新时间:2023-11-30 00:20:28 25 4
gpt4 key购买 nike

我对 mysql 知之甚少,我正在导入一个数据库中包含许多数字的 csv 文件,我的开发人员将字段类型从 INT 更改为 VARCHAR,并且我的脚本通常按数字降序对一个字段进行排序,不再显示数字按降序排列,即使我使用 phpmyadmin 并单击该列,数字也会混淆。

他向我提到,当他将数字字段值更改为 VARCHAR 时,因为否则数据会被损坏。他成功导入了数据,但我的显示脚本不再正常工作。

我已经超出了我的能力范围。

'AVGSEARCHES` varchar(11) COLLATE utf8_bin DEFAULT NULL,
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1406

以下是排序顺序:

99009088081007400072070

流量中选择不同的关键字AVGSEARCHES WHERE STATUS='Y' ORDER BY AVGSEARCHES DESC

最佳答案

一种方法是使用前导零在左侧填充固定长度的字符串。阻止使用索引进行排序,但确实完成了工作。如果将其转换为存储函数,看起来会更整洁。

缺少“装饰”。

SELECT DISTINCT KEYWORD, AVGSEARCHES 
FROM traffic
WHERE STATUS='Y'
ORDER BY RIGHT(CONCAT('00000000000', TRIM(AVGSEARCHES)), 11) DESC

要确认问题所在,请运行此查询:

SELECT DISTINCT KEYWORD, AVGSEARCHES, 
CONCAT('!', AVGSEARCHES, '!') raw_avgs,
LENGTH(AVGSEARCHES) avgs_raw_len,
CONCAT('!', TRIM(AVGSEARCHES), '!') trim_avgs,
LENGTH(TRIM(AVGSEARCHES)) avgs_len,
CHAR_LENGTH(TRIM(AVGSEARCHES)) avgs_char_len,
RIGHT(CONCAT('00000000000', TRIM(AVGSEARCHES)), 11) with_trim
FROM traffic
WHERE STATUS='Y'
ORDER BY RIGHT(CONCAT('00000000000', TRIM(AVGSEARCHES)), 11) DESC

以下是操作提供的一些示例输出:

Keyword                 AVGSearches   no_trim with__trim 
window valances 9900 009900 009900
wood blinds 9900 009900 009900
arch window shutters 90 00000090 00000090
arched window shutters 90 00000090 00000090

这不可能是正确的!根据查询,“no_trim”和“with_trim”列的宽度应为 11 个字符。

嗯,我开始想知道这些 AVGSearches 列中到底有什么。

我已编辑查询以告诉我该列中实际包含的内容。

关于php - Mysql varchar 字段的数字不能很好地排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23285970/

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