【发布时间】:2015-04-16 08:47:59
【问题描述】:
我有一个奇怪的问题。我正在使用 Yii2(最新稳定版)。 我的桌子上有一些用于钻石底座的过滤器。过滤器 r 浮动(权重)之一。
当我尝试从 1.1 过滤到 1.2 时 - 我看到来自活动记录的数组结果。当我尝试请求 1.1 到 1.1(精确重量)时,yii 返回空数组。
我尝试从调试工具栏复制请求,在mysql控制台中执行它,mysql正确返回所有结果。
请求:
SELECT `Diamonds`.* FROM `Diamonds`
LEFT JOIN `DiamondsSpecialGroups`
ON `Diamonds`.`specialGroup` = `DiamondsSpecialGroups`.`id`
WHERE (((((`endPrice` >= 500)
AND (`type` IN (0, 1, 2, 3))) AND ((`active`=1)
AND (`internalBlock`=0)
AND (`frontendHide`=0)))
AND (`Weight`=0.39))
AND (`endPrice` >= '500'))
AND (`endPrice` <= '1323231')
ORDER BY `endPrice`
LIMIT 50
如果我删除
(`Weight`=0.39)
所有结果都在 mysql 和 yii 中播种。
最后一个问题 - 为什么?
【问题讨论】:
-
=和浮动是相当困难的。浮点数永远不会 100% 准确我认为问题可能是从 ruby 到 mysql 的转换可能会稍微改变您的0.39的值。 -
这是关于这个问题的更详细的答案。 stackoverflow.com/questions/2567434/…
-
谢谢!将 FLOAT 更改为 DECIMAL 后,一切似乎都很好!
-
@Albin 您应该将其作为答案发布。
标签: mysql activerecord yii2