回答

收藏

Yii addInCondition浮点数:怎么样?为什么?addInCondition('column

技术问答 技术问答 214 人阅读 | 0 人回复 | 2023-09-14

如何添加浮点数?InCondition?
( O/ {. _0 f; u' y, |* C我尝试了很多。) L- O8 O7 ]) D7 T& B) o
正常工作:* D3 Q, [6 u% \3 R: C
$criteria=new CDbCriteria();$criteria->addInCondition('order_id',array(36907));$tasks=OrderTask::model()->findAll($criteria);在我的情况下,它返回了四个模型:
/ y* K/ w' c; p. J% u0 R7 k+ O& K1 p* ?( u6 X5 t& m$ A3 s4 B
但如果我试试
4 c. y: n" l4 n  m/ ?1 T4 i- x3 p$criteria=new CDbCriteria();$criteria->addInCondition('order_id',array(36907));$criteria->addInCondition('step',array(3.20));$tasks=OrderTask::model()->findAll($criteria);或者  X) L6 N" `6 i! A- U) d
$criteria=new CDbCriteria();$criteria->addInCondition('step',array("3.20"));$tasks=OrderTask::model()->findAll($criteria);或者
7 W* U" g8 e. S, ]4 o3 z* q$criteria=new CDbCriteria();$criteria->addInCondition('step',array('3.2'));$tasks=OrderTask::model()->findAll($criteria);结果为空。  y) X5 \/ s. x; i4 {/ i
根据日志,查询为:. A% ?% E& h; ^
system.db.CDbCommand.query(SELECT * FROM orders_tasks tWHERE step
+ b7 P  \5 q2 k' M. m  {( A4 D' m=:ycp1。与:ycp1 = 3.2绑定). c! g+ _  x0 p# }
phpmyadmin此查询返回5360行
1 y$ @1 k% H. R1 h! iSELECT * FROM  `orders_tasks`  `t` WHERE step = 3.20phpmyadmin此查询返回0行. ]: \. ~8 S+ z6 z  @( P8 w# N
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"这个尝试
" k; c* u! K& [: C9 \+ s$criteria=new CDbCriteria();$criteria->addInCondition('step',array("3,20"));$tasks=OrderTask::model()->findAll($criteria);返回step = 3或20的模型
0 w( o/ F% W" H$ W+ ophpmyadmin本查询返回step = 3或20的行; {# m  F" c+ s) ]4 J- v0 Z
SELECT * FROM  `orders_tasks`  `t` WHERE step = '3,20'那么,如何addInCondition浮点数呢?
2 t$ \( M0 T9 V# G细节,例如step 字段是 float(8,2)  [# d9 R; Y' @. T- b" |" E. g
SQL表转储:# k* e0 J3 V2 S% k) L
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
, @+ ?# \' @% N1 x; g/ y2 d                                                               
, l0 W) V, T9 |    解决方案:                                                                ! n& P8 @2 j) Z" A" a0 r) Q6 J
                                                                DROP TABLE IF EXISTS `prefix_test`;CREATE TABLE IF NOT EXISTS `prefix_test` (  `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 ;INSERT INTO `prefix_test` VALUES (1,36907,3.20,0);INSERT INTO `prefix_test` VALUES (2,36907,3.21,0);INSERT INTO `prefix_test` VALUES (3,37907,4.13,0);$criteria=new CDbCriteria();$criteria->addInCondition('order_id',array(36907));$criteria->addInCondition('step',array(3.20));$tests=Test::model()->findAll($criteria);echo "Rows: ".count($tests).": ~! e7 w" n% ^1 t
";#Returns Rows: 0在Yii日志中查询
" z4 a$ g9 u* F/ h* VSELECT * FROM `prefix_test` `t` WHERE (order_id=:ycp0) AND (step=:ycp1). Bound with :ycp0=36907,:ycp1=3.2MySql实际查询日志
" p5 }8 ]5 R: P0 pSELECT * FROM `prefix_test` `t` WHERE (order_id=36907) AND (step='3.2')这将解决你的问题7 M7 C$ x# p& s' E, ], m/ D
ALTER TABLE `prefix_test` CHANGE `step` `step` decimal(10,2) NOT NULL;之后,您的查询返回( c$ w; P& N% ]
#Returns Rows:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则