#sql #kohana
#sql #kohana
Вопрос:
SELECT users.*
FROM users INNER JOIN roles_users ON users.id = roles_users.user_id
WHERE roles_users.role_id IN (1, 2)
GROUP BY users.id
HAVING COUNT(*) = 2
Я зашел так далеко:
DB::select()->from('users')->join('roles_users')
->on('users.id', '=', 'roles_users.user_id')
->where('roles_users.role_id', 'IN', array(1, 2))
Как я могу выполнить ГРУППИРОВКУ ПО и КОЛИЧЕСТВО (*) в Kohana query builder?
Ответ №1:
Почему бы вам не сделать это так?
$query = DB::query(Database::SELECT,
'SELECT users.*
FROM users INNER JOIN roles_users ON users.id = roles_users.user_id
WHERE roles_users.role_id IN (1, 2)
GROUP BY users.id
HAVING COUNT(*) = 2'
);
$query->execute();
Пример:
$results = DB::query(Database::SELECT,
'SELECT * FROM
post_scheduled
WHERE
DATE(FROM_UNIXTIME(scheduled)) = DATE(NOW())
AND
TIME_FORMAT(FROM_UNIXTIME(scheduled), "%H:%i") = TIME_FORMAT(NOW(), "%H:%i")
AND
published = 0'
)->execute()->as_array();
foreach($results as $result)
{
$id = $result['id'];
# ...
}
Конструктор запросов… (не тестировался)
DB::select()
->from('users')
->join('roles_users')
->on('users.id', '=', 'roles_users.user_id')
->where('roles_users.role_id', 'IN', array(1, 2))
->group_by('users.id')
->having('COUNT(*)', '=', '2');
Комментарии:
1. Я получаю сообщение об ошибке в столбце COUNT, который не найден для Having() для метода query builder. Первый метод тоже в порядке, но я не знаю, как обрабатывать результаты? Я не могу сделать ->as_array() после выполнения () ? Итак, как я должен обрабатывать результаты.. для этого?
2. @Karem, я не тестировал второй, но должно быть что-то вроде этого. Я опубликовал рабочий пример, который у меня есть для первого метода.
3. Попробуйте -> имея (DB::expr(‘COUNT(*)’), ‘=’, ‘2’);