【发布时间】:2013-01-21 09:13:38
【问题描述】:
如何用浮点数添加InCondition?
我尝试了很多。
这工作正常:
$criteria=new CDbCriteria();
$criteria->addInCondition('order_id',array(36907));
$tasks=OrderTask::model()->findAll($criteria);
在我的例子中,它返回 4 个模型:
但如果我尝试
$criteria=new CDbCriteria();
$criteria->addInCondition('order_id',array(36907));
$criteria->addInCondition('step',array(3.20));
$tasks=OrderTask::model()->findAll($criteria);
或者
$criteria=new CDbCriteria();
$criteria->addInCondition('step',array("3.20"));
$tasks=OrderTask::model()->findAll($criteria);
或者
$criteria=new CDbCriteria();
$criteria->addInCondition('step',array('3.2'));
$tasks=OrderTask::model()->findAll($criteria);
结果为空。
根据日志,查询为:
system.db.CDbCommand.query(SELECT * FROM
orders_taskstWHERE step=:ycp1. 绑定:ycp1=3.2)
phpmyadmin 中的这个查询返回 5360 行
SELECT * FROM `orders_tasks` `t` WHERE step = 3.20
phpmyadmin 中的这个查询返回 0 行
SELECT * FROM `orders_tasks` `t` WHERE step = '3.20'
SELECT * FROM `orders_tasks` `t` WHERE step = '3.2'
SELECT * FROM `orders_tasks` `t` WHERE step = "3.20"
这次尝试
$criteria=new CDbCriteria();
$criteria->addInCondition('step',array("3,20"));
$tasks=OrderTask::model()->findAll($criteria);
返回 step=3 OR 20 的模型
phpmyadmin 中的此查询返回 step=3 OR 20 的行
SELECT * FROM `orders_tasks` `t` WHERE step = '3,20'
那么,如何使用浮点数addInCondition?
例如详情
step 字段为float(8,2)
Sql 表转储:
CREATE TABLE IF NOT EXISTS `orders_tasks` (
`task_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`step` float(6,2) NOT NULL,
`done` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`task_id`),
KEY `order_id` (`order_id`),
KEY `step` (`step`),
KEY `orderstep` (`order_id`,`step`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Yii 版本:1.1.10
【问题讨论】:
-
step是什么字段?varchar或decimal? -
@dInGd0nG 它是 float(6,2) 例如: CREATE TABLE IF NOT EXISTS
orders_tasks(task_idint(11) NOT NULL AUTO_INCREMENT,order_idint(11) NOT NULL ,stepfloat(6,2) NOT NULL,doneint(1) NOT NULL DEFAULT '0', PRIMARY KEY (task_id), KEYorder_id(order_id), KEYstep(step), KEYorderstep(order_id,step) ) ENGINE=InnoDB 默认字符集=utf8 AUTO_INCREMENT=4 ; -- -- 转储表orders_tasks的数据 -- INSERT INTOorders_tasks(task_id,order_id,step,done) VALUES (1, 36907, 3.20, 0), (2, 36907 , 3.00, 0), (3, 36907, 20.00, 0); -
在问题上添加您的代码,编辑并粘贴到那里。这样,任何查看问题的人都可以获得所有需要的信息,而无需阅读所有 cmets。
-
@Yaroslav 完成,谢谢