Php 如何对mysql中存储为varchar的浮动价格值进行排序

Php 如何对mysql中存储为varchar的浮动价格值进行排序,php,mysql,Php,Mysql,嗯, 我对数据库中的一些值有点问题 ,我有两种不同类型的值,因为我有列Price(varchar),问题是这样的 [ 我尝试按cast(签名价格)asc从产品订单中选择价格,但没有结果,因为没有“.”的价格排序不太好 谢谢!您应该选择DECIMAL数据类型来存储价格值 为了暂时绕过该问题,您可以使用以下任一方法: 方法1:…按价格+0 ASC订购.. 或 方法2:…按铸件订购(价格为十进制(18,4))… 注意: 最好将price列的数据类型更改为DECIMAL(18,4) 如果引入此更改,则

嗯, 我对数据库中的一些值有点问题 ,我有两种不同类型的值,因为我有列Price(varchar),问题是这样的

[

我尝试按cast(签名价格)asc从产品订单中选择价格,但没有结果,因为没有“.”的价格排序不太好


谢谢!

您应该选择
DECIMAL
数据类型来存储价格值

为了暂时绕过该问题,您可以使用以下任一方法:

方法1:
…按价格+0 ASC订购..

方法2:
…按铸件订购(价格为十进制(18,4))…


注意:

最好将
price
列的数据类型更改为
DECIMAL(18,4)


如果引入此更改,则按价格订购ASC就足够了。

您应该选择存储价格值的数据类型

为了暂时绕过该问题,您可以使用以下任一方法:

方法1:
…按价格+0 ASC订购..

方法2:
…按铸件订购(价格为十进制(18,4))…


注意:

最好将
price
列的数据类型更改为
DECIMAL(18,4)


如果引入此更改,则按价格订购ASC就足够了。

为什么将价格存储为
VARCHAR
?如果有美分,将其存储为
DECIMAL
,如果货币没有美分,将其存储为
INTEGER
。如果我更改类型(外部api将破坏数据库,在我的数据库中插入自动日期的脚本不知道该类型,相信我,该表上有160列都是varchar)我知道你说的,但我不能更改类型(我必须找到解决方案)
orderbyreplace(price),“”)
?查看此结果@KikiTheOne尝试一下为什么将价格存储为
VARCHAR
?如果有美分,将其存储为
DECIMAL
,如果货币没有美分,将其存储为
INTEGER
。如果我更改类型(外部api将破坏数据库,在我的数据库中插入自动日期的脚本不知道该类型,相信我,该表上有160列都是varchar)我知道你说的,但我不能更改类型(我必须找到解决方案)
orderbyreplace(price),“”)
??看看这个结果@KikiTheOne试试这个有同样的原因,在查询中使用casting会降低查询速度。@Raptor有什么好办法解决这个问题吗?我也面临同样的问题。但是现在它的工作很好,正如回答中提到的。使用正确的数据类型来存储数据是第一件事。请努力工作d去做。有同样的理由认为,在查询中强制转换会降低查询速度。@Raptor有什么好方法来解决这个问题吗?我也面临同样的问题。但现在它的工作很好,正如答案中所提到的。使用正确的数据类型来存储数据是第一件要做的事情。请努力做到这一点。
ALTER TABLE tablename MODIFY price DECIMAL(18,4);