我有一些PHP代码,允许我按照升序和降序对列进行排序(点击表格行标题),这很好。它适用于我的D.O.B列(具有日期/时间字段类型),但不适用于数量列。
例如,我的数量为10,50,100,30和另外100个。
订单似乎只是欣赏第一个整数,因此我对该列的排序按此顺序排列: 10,100,100,30,50 ...和 50 ,30,100,100,10 。
这显然是不正确的,因为100大于50,因此100个值肯定会出现在最后?在我看来,100只被考虑为具有'1'值,然后它出现在10之前,因为系统识别它有另一个0。
这是正常的吗?有什么办法可以解决这个问题吗?谢谢你的帮助。附:我可以在必要时显示代码,但是想知道这是否是默认情况下的常见问题。
答案 0 :(得分:0)
您的字段可能定义为char / varchar / text / ...,即string type而不是numeric type。在那种情况下执行词典排序。
答案 1 :(得分:0)
听起来你正在通过将这些值视为字符串而不是数字来进行排序。什么在做排序? PHP,还是MySQL?如果没有看到实际排序的代码,很难说出错了什么。
答案 2 :(得分:0)
排序是将数据视为字符串而不是整数。检查数据库中列的数据类型。如果这是一个数字而不是一个字符串,那么数据将被转换为数据库和排序例程之间的某个字符串。
答案 3 :(得分:0)
看起来你在排序字符串而不是数字,列的数据类型是什么?正确排序字符串数字的唯一方法是添加前导零,但最好将数据存储在正确的类型中,这样每次选择数据时都不必进行这些操作。
答案 4 :(得分:0)
如果由于某种原因需要将列保留为字符类型,则可以转换为合适的数字类型以进行排序。这比仅更改列效率低。
ORDER BY CAST(theColumn AS DECIMAL(5, 2))
答案 5 :(得分:0)
您的专栏是文字类型。您可以永久更改列类型,也可以在进行排序时进行转换。
表格更改(您可能需要不同的默认值)
ALTER TABLE [Table]
MODIFY COLUMN [Column] INTEGER UNSIGNED NOT NULL DEFAULT '0';
排序时播放
SELECT *
FROM [Table]
ORDER BY CAST([Column] as UNSIGNED INTEGER) ASC;