Помогите составить реляционный запрос

Бьюсь уже два дня, ничего не понимаю. Есть 2 базы данных с таблицами accounts и users. Нужно выбрать нужные записи из users, у которых значение group в accounts больше 1.

Структура таблиц следующая:

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 > 1)

ORDER BY name DESC, some_info DESC

Пробовад сделать так, но выводятся все записи.


$criteria=new CDbCriteria;

$criteria->select = '*';

$criteria->condition = 'x > 100';


$users= Users::model()->with(array(

    'accounts'=>array(

        'select'=>false,

        'joinType'=>'INNER JOIN',

        'condition'=>'group > 1',

    ),

))->findAll($criteria);

наверно я что то не понял

в полном запросе стоит лефтджоин в примере иннер

но запрос какойто сильно сложный

SELECT t.* FROM users t

INNER JOIN accounts a ON a.id=t.account_id

WHERE a.group>1

решений я вижу много, знать бы что нужно

ну вот к примеру

описать в модели user связь для accounts

потом в критерий поиска добавить

$criteria->with = array(‘accounts’);

$criteria->addCondition(‘account.group_id>1’);

либо в сам критерий без with

$criteria->join = ‘INNER JOIN accounts ON (accounts.id=t.account_id AND account.group>1)’;

либо

Спасибо больше. Второй вариант - то, что нужно.

Но таблица с аккаунтами и с пользователями в разных базах. Как указать в запросе имя нужной базы из файла настроек?

если в разных БД но на одном сервере

то добавляешь имя БД перед таблицей

тоесть типа

SELECT t.* FROM database1.table1 AS t, table2 AS g …

вторая таблица будет выбрана из БД используемой в текущем подключении

для первой таблици БД указана в запросе

Нужно желательно из файла настроек, так как приложение буду использовать не я один, а имена баз данных у других людей будут отличаться от тех, что я пропишу в запросах.

в конфиг в params закинь имя БД

если же ты хош использовать разные подключения! типа описать несколько компонентов (components) db в коефиге, то врят ли получиться использовать AR с одним запросом и разными подключениями в одном флаконе.

спасибо, попробую. тоже думал добавить просто имена в конфиг и из него потом вытаскивать

И еще, как составить такой запрос?

Есть имена нужных аккаунтов.


$ref_account = LogReferals::model()->findAll('main = "'.Yii::app()->user->name.'"');

Как выбрать все записи из таблицы users, у которых account_name будут те, что находятся в $ref_account->ref?

да вообщемто аналогично

Все, запрос немного упростил и теперь разобрался.