具有多个AND / OR的Yii条件 - 运算符优先级

时间:2011-10-23 23:11:01

标签: php mysql yii

需要在此处修改哪些内容才能获得有效的select语句?

关于Jon的回复,

更新了

<?php echo $form->dropDownList($model, 'GroupId', GxHtml::listDataEx(Group::model()
               ->findAll(array(
                    'condition'=>'SC=:stat AND Pri=:pri AND Type=:typ OR Type=:typ2 OR Type=:typ3', 
                    'params'=>array(':stat'=>'A', ':pri'=>'Y', ':typ'=>'A', ':typ2'=>'B', ':typ3'=>'C')),
                    'GroupId', 'Name')); 
?>

哪些事情:

system.db.CDbCommand.query
    (SELECT * FROM `group` `t` 
    WHERE SC=:stat AND Pri=:pri AND Type!=:typ 
    OR Type!=:typ2 OR Type!=:typ3. 
    Bound with :stat='A', :pri='Y', :typ='A', :typ2='B', :typ3='C')

这里的问题并非一切都被考虑在内。我可以以某种方式将运算符优先级添加到Yii代码中吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以简单地使用括号来获得所需的运算符优先级。

答案 1 :(得分:1)

您可能错误地使用了运算符。

如果typ == 'A'typ2 == 'B',则考虑

type != 'A' OR type != 'B'
无论true是什么,

都是type。你可能想要这个:

'condition'=>'SC=:stat AND Pri=:pri AND Type!=:typ AND Type!=:typ2 AND Type!=:typ3', 

除此之外,如果出现问题,您可以简单地添加parens来修复优先级。