MySQL请求从控制台调用时返回结果,但在使用ActiveRecord请求时为空

时间:2015-04-16 08:47:59

标签: mysql activerecord yii2

我有奇怪的问题。我使用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中播种。

最后问题 - 为什么?

1 个答案:

答案 0 :(得分:1)

=和浮动很难。

浮点数永远不会100%准确我认为问题可能是0.39的两个不同实例彼此略有不同。

为了避免这种情况,您可以使用DECIMAL代替FLOAT,如我在下面发布的答案中所建议的那样。

More elaborate answer.