2012-07-14 49 views
1

我有一个实现消息系统。 我的问题是,我想知道用户是否已经与其他用户的线程,若然是中mysql在select中选择一个值

我有一个messages_recips表看起来像这样

---------------------------  
| mid | seq | uid | status| 
|-------------------------- 
| 4 | 1 | 1 | A  | 
| 4 | 1 | 2 | A  | 
--------------------------- 

如果用户ID 1有一个用户id为2的线程我拥有两个相同的中间行。 我知道我可以创建2 sqls来实现我所要求的,但我试图在1 sql中完成。

+0

你有没有试着用自己加盟表? – 2012-07-14 10:25:33

+0

我认为你必须编写一个自我连接查询。 从表名中选择u.uidü INNERJOIN tablename u1 on u.mid = u1.mid – 2012-07-14 10:28:34

回答

0

我认为你必须写一个自连接查询:

Select u.uid, u1.uid from tablename u 
INNER JOIN tablename u1 on u.mid = u1.mid 

你会得到所有谁具有相同的中期用户。

为了仅获取user1和user2记录,您必须在查询结尾处放置where子句。

Select u.uid, u1.uid from tablename u 
INNER JOIN tablename u1 on u.mid = u1.mid 
Where (u.uid In (1,2) OR u1.uid In (1,2)) ; 
+0

@Jonathan Leffler,感谢您的参与。 – 2012-07-14 11:12:11

+0

感谢您的答案,但这将返回用户之间的所有消息,我想接收user_id1和user_id2并检查它们之间是否有线程 – sroot 2012-07-14 11:21:15

+0

那么这是我所做的,不知道它是最好的方式,但.. .. 。从表名u中选择u.mid u.mid = u1.mid和u1.uid ='1'的INNER JOIN表名u1,其中u.seq = 1和u.uid ='2'LIMIT 1,让我知道你认为 – sroot 2012-07-14 11:26:55

1

正如Waqar Janjua指出,关键这是一个自连接查询:

SELECT m1.mid 
    FROM messages_recips AS m1 
    JOIN messages_recips AS m2 ON m1.mid = m2.mid 
WHERE m1.uid = 1 
    AND m2.uid = 2 
+0

稍后更改谁将阅读此答案后,并将m1.uid替换为m2.uid – sroot 2012-07-14 15:54:23

+0

非常感谢大家! – sroot 2012-07-14 15:54:49

+0

@thirtydot:感谢您修复我的错字。 – 2012-07-14 23:28:23