Дано:
table users:
id | name
table users_problems:
id | user_id | problem_id
table problems:
id | name
Нужно:
Сделать выборку юзеров у которых одновременно будет проблема с id = 1 & (и) id = 2. Если вы не знакомы с CakePHP, напишите хотя бы вариант SQL-запроса.
Мой вариант, но он работает как id = 1 || (или) id = 2:
$conditions = array(
'conditions' => array(
'UsersProblem.problem_id' => array(1, 2)
),
'recursive' => -1,
);
$conditions['joins'][] = array(
'table' => 'users_problems',
'alias' => 'UsersProblem',
'type' => 'INNER',
'conditions' => array(
'User.id = UsersProblem.user_id',
));
Такой вариант не работает:
$conditions = array(
'fields' => array(
'User.id'
),
'conditions' => array(
'AND' => array(
'UsersProblem.problem_id' => 38,
'UsersProblem.problem_id' => 41,
)
),
'recursive' => -1,
'contain' => array(
'Problem'
)
);
$conditions['joins'][] = array(
'table' => 'users_problems',
'alias' => 'UsersProblem',
'type' => 'INNER',
'conditions' => array(
'User.id = UsersProblem.user_id',
));
Не работает потому, что берет от AND только последнее значение. Получается такой запрос:
SELECT `User`.`id` FROM `lawyers`.`users` AS `User` INNER JOIN `lawyers`.`users_problems` AS `UsersProblem` ON (`User`.`id` = `UsersProblem`.`user_id`) WHERE `UsersProblem`.`problem_id` = 41