2014-01-07 91 views
1

我有一個groups,usersusers_groups表。用戶和組之間的關係是多方面的。用戶可以分配到多個組。我想運行一個查詢,獲取user_id1和user_id2之間的COMMON的組列表。用SQL查找公共行

我已經構建了以下查詢,但它似乎崩潰了系統和MySQL服務器(在xampp上),並且該頁面需要永久加載(即不加載)。

這是爲什麼?用戶表中有大約6000個測試用戶,組表中有30個組和70,000個users_groups條目。有沒有更好的方法來構造這個查詢?

$user_id1 = $this->db->escape($user_id1); 
    $user_id2 = $this->db->escape($user_id2); 
    $sql = "SELECT $select_string FROM users_groups 
       INNER JOIN groups ON groups.group_id = users_groups.ug_group_id 
       WHERE ug_group_id IN (SELECT ug_group_id FROM users_groups WHERE ug_user_id = $user_id2) 
       AND ug_user_id = $user_id1 LIMIT 10"; 

    $query = $this->db->query($sql); 

回答

2

使用GROUP BY ... HAVING

試試這個:

SELECT $select_string 
FROM users_groups ug 
INNER JOIN groups g ON g.group_id = ug.ug_group_id 
WHERE ug.ug_user_id IN ($user_id1, $user_id2) 
GROUP BY g.group_id HAVING COUNT(DISTINCT ug.ug_user_id) = 2 
LIMIT 10 
+0

感謝。我必須將第4行和第5行中的ug_group_id更改爲ug_user_id,並在此之後運行。再次感謝! – emkay

+0

@emkay非常歡迎您... –