1

我有一个实施消息系统。我的问题是,我想知道一个用户是否已经与另一个用户有一个线程,如果有,中间是什么

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

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

如果用户 id 1 有一个用户 id 为 2 的线程,我会持有 2 行具有相同中间值的行。我知道我可以创建 2 个 sql 来实现我的要求,但我试图在 1 个 sql 中做到这一点。

4

2 回答 2

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
于 2012-07-14T15:13:25.963 回答
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 ) ) ;
于 2012-07-14T10:29:17.463 回答