2012-02-13 51 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