2011-10-19 25 views
0
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 

我來到這麼遠:寫這篇SQL中的Kohana查詢生成器

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和Kohana的查詢生成器HAVING COUNT(*)?

回答

2

你爲什麼不這樣做呢?

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

我得到沒有找到COUNT列錯誤有()進行查詢生成器方法。 第一種方法也可以,但我不知道如何處理結果?我不能做 - > as_array()後執行()?那麼我應該如何處理結果呢? – Karem

+0

@Karem,我沒有測試第二個,但應該是這樣的。我已經發布了第一種方法的工作示例。 –

+1

Try - > having(DB :: expr('COUNT(*)'),'=','2'); – matino