如何使用IN&在YII ACtive Record中的条款之间?

时间:2011-05-20 05:59:01

标签: yii

我想在活动记录中写下一个查询。

SELECT *
FROM `User`
WHERE `UserId`
IN ( 6, 7, 8, 9 ) ;

由于

7 个答案:

答案 0 :(得分:31)

您可以使用CDbCriteria声明:

$criteria = new CDbCriteria();
$criteria->addInCondition('userId', array(6,7,8,9));
$result = User::model()->findAll($criteria);

答案 1 :(得分:10)

您可以将数组作为特定属性的值,如下所示(未经测试):

$model=new User();
$result=$model->findAllByAttributes(array('UserId'=>array(6,7,8,9)));

答案 2 :(得分:8)

如果您想更快地获得查询,请使用Command Builder:

Yii::app()->db->createCommand()
    ->select('*')
    ->from('user')
    ->where(array('in', 'UserId', array(6, 7, 8, 9)))
    ->queryAll();

要通过CActiveRecord获取,请使用findAllByAttributes

User::model()
    ->findAllByAttributes(array(
         'UserId' => array(6,7,8,9)
    ));

但它将获得具有所有相关关系的User的完整对象,因此速度较慢。

答案 3 :(得分:4)

您可以通过CDbCriteria使用IN和BETWEEN语句:

$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(6,7,8,9));
$criteria->addBetweenCondition('id', '10', '20', 'OR');
$result = User::model()->findAll($criteria);

这将导致SQL查询如下:

SELECT *
FROM `User`
WHERE `id`
IN ( 6, 7, 8, 9 )
OR `id` BETWEEN 10 AND 20

请注意addBetweenCondition()方法中的第4个参数 OR ;如果缺少它,将应用默认的 AND 将该条件连接到WHERE查询的其余部分。

P.S。严格来说,应将addBetweenCondition()addInCondition()方法添加到现有条件中。因此,您可能需要首先设置条件的初始条件,如下所示:

$criteria->condition = '1=1';

答案 4 :(得分:0)

我仍然使用这种方式:

public function getInterval( $data_start, $data_stop ){
  $criteria = new CDbCriteria;
  $criteria->condition = "date  >= '$data_start' AND date <= '$data_stop'";
  return $criteria;
}
$model = Object::model()->findAll(getInterval('2014-06-01','2014-06-30');

答案 5 :(得分:0)

在yii中有一个名为findAllBySql的函数来运行sql查询并获取输出。

$sql="SELECT * FROM `User` WHERE `UserId` IN ( 6, 7, 8, 9 )";//Your Sql query
$value=User::model()->findAllBySql($sql);// "User" is the model belongs to the table 'User'

&#34; $ value&#34;将返回数组中的结果。要获取值,可以使用以下方法。

foreach($value as $val){
   echo $val->UserId;
}

(或)

var index=0;
echo $val[$index]->UserId;

答案 6 :(得分:0)

您可以使用 addInCondition ,也可以使用比较方法。

 $criteria = new CDbCriteria();
 $criteria->compare('UserId',array(6,7,8,9));
 $userDataObj = User::model()->findAll($criteria);