Написание этого SQL в конструкторе запросов Kohana - PullRequest
0 голосов
/ 20 октября 2011
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))

Как я могу сделать GROUP BY и HAVING COUNT (*) в конструкторе запросов Kohana?

1 Ответ

2 голосов
/ 20 октября 2011

Почему бы вам не сделать это так?

$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');
...