Запрос к БД. Выбрать записи с условиями 2й таблицы

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

Запрос к БД. Выбрать записи с условиями 2й таблицы

Сообщение rem » 2012.01.06, 02:55

Здравствуйте. Целый день ломаю голову, ничего не получается.
Есть 2 таблицы - accounts (has_many users) и users (has_one accounts).
В accounts есть столбцы id, name, group... В users - id, name, account_id...
Не получается выбрать нужные записи из users, у которых group в accounts больше 1. То есть выводятся все записи - и нужные и ненужные.
Делал по примеру из документации:

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

$criteria=new CDbCriteria;
$criteria->select = '*';
$criteria->condition = 'x > 100';

$users= Users::model()->with(array(
    'accounts'=>array(
        'select'=>false,
        'joinType'=>'INNER JOIN',
        'condition'=>'group > 2',
    ),
))->findAll($criteria);
Может быть дело в том, что таблицы находятся в разных базах данных?

delancer
Сообщения: 58
Зарегистрирован: 2011.03.11, 19:37
Откуда: Украина, Донецк

Re: Запрос к БД. Выбрать записи с условиями 2й таблицы

Сообщение delancer » 2012.01.06, 04:33

rem, показал бы хоть ошибку которая вылетает

esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Запрос к БД. Выбрать записи с условиями 2й таблицы

Сообщение esche » 2012.01.06, 07:44

rem писал(а):Не получается выбрать нужные записи из users, у которых group в accounts больше 1. То есть выводятся все записи - и нужные и ненужные.
...
Может быть дело в том, что таблицы находятся в разных базах данных?
'together'=>true должен помочь, если нужно выбрать юзеров, у которых числовое значение group > 2 (в смысле не количество)
p.s. В тексте единичка, а в коде 'condition'=>'group > 2'?
...

Аватара пользователя
rem
Сообщения: 56
Зарегистрирован: 2011.11.22, 16:08

Re: Запрос к БД. Выбрать записи с условиями 2й таблицы

Сообщение rem » 2012.01.06, 14:14

delancer, Ошибок нету, просто выводятся все записи.

esche, Добавил:

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

'accounts'=>array(
        'select'=>false,
        'joinType'=>'INNER JOIN',
        'condition'=>'group > 2',
        'together'=>true,
    ),
Но теперь не выводится ни одной записи, даже если убрать condition.
зы. в принципе не важно 1 или 2. всего 6 групп, просто тестировал и вставил с 2.


Структура таблиц следующая:
db1.users: id, name, account_id, ...
db1.user_info: user_id, some_info, ...
db2.accounts: id, name, group, ...

Запрос такой:
SELECT id, name, account_id, some_info
FROM user_info
LEFT JOIN user ON user_id = id
WHERE account_id IN (SELECT id FROM db2.accounts WHERE group > 2)
ORDER BY name DESC, some_info DESC


И еще заметил что данные из таблицы accounts не получаю, вместо них выдает array(0) { }:

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

Users::model()->with('accounts')->findAll($criteria); 

Аватара пользователя
rem
Сообщения: 56
Зарегистрирован: 2011.11.22, 16:08

Re: Запрос к БД. Выбрать записи с условиями 2й таблицы

Сообщение rem » 2012.01.07, 16:25

Никто не знает как правильно составить такой запрос?

Ответить