所以我想找到如果值x在2列的值之间退出,那么我已经在phpmyadmin中运行了查询:
正常Approch: -
SELECT * FROM `traits_versions` WHERE 16 BETWEEN `trait_value_lower` and `trait_value_upper` and `style_id` = 1
它给了我很好的结果。但是当我想在YII中找到相同的方法它没有运行并且给出sql错误时:
YII apprroch:
$details = array();
$criteria = new CDbCriteria();
$criteria->addCondition('style_id='.$style_id);
$criteria->addCondition('version='.$version);
$criteria->addBetweenCondition($style_contribution,$this->trait_value_lower,$this->trait_value_upper);
$trait_details= $this->find($criteria);
当我在日志中调试查询时,如果是yii:
,则显示SELECT * FROM `traits_versions` `t` WHERE ((style_id=1) AND (version=1)) AND (16 BETWEEN NULL AND NULL) LIMIT 1
为什么它在查询中给出NULL值,而我在其中传递列的名称。 所以请指导我在yii中出错的地方。
答案 0 :(得分:1)
添加如下所示的比较条件
$criteria->compare('trait_value_lower', 16, false, '>');
$criteria->compare('trait_value_upper',16, false, '<');
而不是条件
$criteria->addBetweenCondition($style_contribution,$this->trait_value_lower,$this->trait_value_upper);
因为根据Yii doc,条件将适用于一列。
public static addBetweenCondition(string $column, string $valueStart, string $valueEnd, string $operator='AND')