Страница 1 из 1

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

Добавлено: 2012.01.06, 02:55
rem
Здравствуйте. Целый день ломаю голову, ничего не получается.
Есть 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);
Может быть дело в том, что таблицы находятся в разных базах данных?

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

Добавлено: 2012.01.06, 04:33
delancer
rem, показал бы хоть ошибку которая вылетает

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

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

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

Добавлено: 2012.01.06, 14:14
rem
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); 

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

Добавлено: 2012.01.07, 16:25
rem
Никто не знает как правильно составить такой запрос?