Php 使用小数和非小数对varchar字段排序
带小数和无小数的Varchar字段 例: 如何按ASC顺序显示 我尝试了以下代码,但没有成功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,而应使用 十进制还是数字 十进制和数字类型存储精确的数字数据值。当需要保
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