Php 使用小数和非小数对varchar字段排序

Php 使用小数和非小数对varchar字段排序,php,mysql,Php,Mysql,带小数和无小数的Varchar字段 例: 如何按ASC顺序显示 我尝试了以下代码,但没有成功 SELECT * FROM posts ORDER BY CAST(price AS DECIMAL(10,2)) DESC LIMIT 0, 9 也 但上述代码似乎都不起作用。有人能给我指出正确的方法吗。排序问题是由于对数字使用了sting类型字段,它永远不会像人类期望的那样排序 如果字段类型为price,则不应使用float,而应使用 十进制还是数字 十进制和数字类型存储精确的数字数据值。当需要保

带小数和无小数的Varchar字段

例:

如何按ASC顺序显示

我尝试了以下代码,但没有成功

SELECT * FROM posts ORDER BY CAST(price AS DECIMAL(10,2)) DESC LIMIT 0, 9


但上述代码似乎都不起作用。有人能给我指出正确的方法吗。

排序问题是由于对数字使用了sting类型字段,它永远不会像人类期望的那样排序

如果字段类型为price,则不应使用float,而应使用 十进制还是数字

十进制和数字类型存储精确的数字数据值。当需要保持精确精度时(例如对于货币数据),可以使用这些类型

你不需要价格的“近似”值

FLOAT和DOUBLE类型表示近似的数字数据值


从我看到的您发布的数据来看,没有理由不将该字段设置为浮点,除非您希望使用VARCHARs。在这种情况下,您可能会问自己,当您只能将FLOAT和VARCHARs排序时,为什么需要将FLOAT和VARCHARs存储在一起type@Memor-当使用整型字段时,X不保存小数,这就是原因我用的是VARCHARfield@max我从来没有说过INT,我说过“例如,定义为FLOAT(7,4)的列看起来像-999.9999”,因为该字段称为price,decimal(很可能)比FLOAT好“十进制和数字类型存储精确的数字数据值。当需要保持精确精度时(例如对于货币数据),可以使用这些类型。"
SELECT * FROM posts ORDER BY CAST(price AS DECIMAL(10,2)) DESC LIMIT 0, 9
SELECT * FROM posts ORDER BY convert(price, decimal) DESC LIMIT 0, 9