как составить условие с where id IN()

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

как составить условие с where id IN()

Сообщение andry »

подскажите, как составить sql условие ввиде where id IN() на ActiveRecord

хочу полю id передать несколько значений для выборки
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: как составить условие с where id IN()

Сообщение kosenka »

andry писал(а):подскажите, как составить sql условие ввиде where id IN() на ActiveRecord

хочу полю id передать несколько значений для выборки

Код: Выделить всё

                        $criteria=new CDbCriteria;
                        $criteria->condition=...
                        $criteria->params=...
                        $criteria->addInCondition('id',array());//то что тебе надо
                        model()->findAll($criteria);
 
Archmage
Сообщения: 78
Зарегистрирован: 2010.03.03, 03:07
Откуда: Иркутск

Re: как составить условие с where id IN()

Сообщение Archmage »

Мне нужно выбрать из таблицы записи у которых ид должен совпадать с заданным и поле имя должно содержать одно из заданных значений. Я пишу:

Код: Выделить всё

$criteria = new CDbCriteria();
$criteria->condition = 'parent_id=:parent_id AND name=:name';
$criteria->params = array(':parent_id'=>$value->id);
$criteria->addInCondition(':name', array('Имя1', 'Имя2', 'Имя3'));
$elementCharacteristic = ElementCharacteristic::model()->findAll($criteria)
 
Вылетает ошибка:
CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Подскажите, пожалуйста, что я делаю не так?
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: как составить условие с where id IN()

Сообщение slavcodev »

Код: Выделить всё

$criteria = new CDbCriteria();
$criteria->condition = 'parent_id=:parent_id';
$criteria->params = array(':parent_id'=>$value->id);
$criteria->addInCondition('name', array('Имя1', 'Имя2', 'Имя3'));
$elementCharacteristic = ElementCharacteristic::model()->findAll($criteria) 
Жду Yii 3!
Archmage
Сообщения: 78
Зарегистрирован: 2010.03.03, 03:07
Откуда: Иркутск

Re: как составить условие с where id IN()

Сообщение Archmage »

Спасибо!
Animum rege, qui nisi paret, imperat. (Управляй своим настроением, ибо оно, если не повинуется, то повеливает)
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: как составить условие с where id IN()

Сообщение andry »

круто, спасибо большое
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: как составить условие с where id IN()

Сообщение Insolita »

Cтолкнулась с необходимостью сделать условие типа

Код: Выделить всё

WHERE a IN (:ar1) AND (b IN (:ar2) OR c IN (:ar3)) 
метод addInCondition позволяет указать оператор AND или OR но максимум что получается - это

Код: Выделить всё

WHERE a IN (:ar1) AND b IN (:ar2) OR c IN (:ar3) 
т.е. не совсем что надо

Получается таких вот более сложных условий с помощью него не написать - только прямым кодом в $criteria->condition ?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: как составить условие с where id IN()

Сообщение rak »

Можно группировать при помощи
http://www.yiiframework.com/doc/api/1.1 ... ith-detail
Получится что-то типа

Код: Выделить всё

$criteria = new CDbCriteria();
$criteria->addInCondition('a', array('Имя1', 'Имя2', 'Имя3'));

$criteria2 = new CDbCriteria();
$criteria2->addInCondition('b', array('Имя4', 'Имя5', 'Имя6'));
$criteria2->addInCondition('c', array('Имя7', 'Имя8', 'Имя9'), 'OR');
$criteria->mergeWith($criteria2);

 
Последний раз редактировалось rak 2011.09.19, 20:36, всего редактировалось 2 раза.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: как составить условие с where id IN()

Сообщение Insolita »

rak супер! спасибо! Так и знала что не могли разработчики не учесть такой нюанс

Выложу наглядный результат

Код: Выделить всё

$cri=new CDbCriteria;
$cri2=new CDbCriteria;
$cri->addCondition('col1',$arr1);
$cri2->addCondition('col2',$arr2);
$cri2->addCondition('col3',$arr3,'OR');
$cri->mergeWith($cri2,true);
 
Ответить