2012-02-13 56 views
2

之間的相互訂閱我有一個表如下獲取兩個用戶

id comm_id user_id .. 

此存儲用戶訂閱社區。現在我想查詢這個表,所以,只有那些訂閱是獲取這2個用戶之間的相互(說USER_ID:2和9)

給我的SQL查詢 表名:db_community_subscribers ID,community_id邀請,USER_ID

"20"  1   "2" 
"28", NULL   "2" 
"31" NULL,  "2" 
"43", 4   "2" 
"47  1    9 
"57", NULL,  "2" 
"59", "12",  "9" 
"60  14   2 
"62", NULL   2 

這些是我想要只選擇1和12,因爲這些是常見的訂閱

+0

我們不應該爲這樣的人提供答案。他們濫用SO社區。 – 2012-02-13 09:16:52

+1

謝謝@Somesh:我們可以看到即時效果:) – 2012-02-13 09:19:41

+0

老兄。我問了9個問題。我回答了70個問題。我不知道接受這樣的事情。我認爲我的upvote單獨決定哪一個被接受的答案是。我的錯。因爲我大部分時間都在這裏提問。老實說我不知道​​刻度線做什麼 – 2012-02-13 09:19:50

回答

3

試試這個:

我認爲這將現在的工作:

SELECT Comm_ID 
FROM tableNAme 
WHERE user_id IN (2,9) 
GROUP BY Comm_ID 
HAVING COUNT(Comm_ID) > 1 

OR

SELECT DISTINCT d.Comm_ID 
FROM 
    (SELECT Comm_ID 
    FROM tableNAme 
    WHERE user_id in (1,2)) d 
GROUP BY d.Comm_ID 
HAVING COUNT(d.Comm_ID) > 1 
+0

只返回第一次訂閱 – 2012-02-13 09:57:52

+0

my bad。This works。我在替換時使用了錯誤的數據集。對不起 – 2012-02-13 10:16:04

1

嘗試以下用戶2的訂閱和9

SELECT group_concat(distinct comm_id) 
    FROM table 
    WHERE user_id in(2, 9) 
    group by user_id having count(id) >1 

OR:

SELECT distinct comm_id 
    FROM table 
    WHERE user_id in(2, 9) 
    group by user_id having count(id) >1 

請做需要的改變讓我知道如果別的你想要的。

+0

沒有完全奏效。我正在更新與實際的表名稱和結構 – 2012-02-13 09:40:32

+0

做一些改變檢查一次,如果它的工作。我已經檢查過它的樣品數據對我有用 – 2012-02-13 09:42:34

+0

第一個返回兩行。第二個有正確的數據。第一個包含所有其他訂閱。那麼我怎麼才能得到第二個。也有拼寫錯誤(從( – 2012-02-13 09:54:36

1

嘗試:

select comm_id, group_concat(id) as subscription_ids 
from subscriptions 
where user_id in (2,9) 
group by comm_id 
having count(distinct user_id)=2 
1

^h你試過簡單的JOIN

SELECT t1.`community_id` 
FROM `tablename` t1 
LEFT JOIN tablename t2 ON (t1.`community_id` = t2.`community_id`) 
WHERE t1.`user_id` = 2 
    AND t2.`user_id` = 9 

它應該爲每個user_id 2的社區找到一個匹配的用戶9的社區。

+0

我沒有。基本上我在這個階段避免了一個連接,因爲後來我必須在這個查詢上做更多的連接來獲得社區名稱和子社區ID – 2012-02-13 10:17:32

+0

它可能比'GROUP BY'更便宜 – Naltharial 2012-02-13 10:18:07

+0

這是行不通的,如果你用t1代替第一個'tablename',它就可以工作,兩者在phpmyadmin中似乎都是一樣的,但我有一個小的數據集 – 2012-02-13 10:24:00