2012-07-14 54 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