2011-12-22 153 views
0

我會盡力解釋我的問題。我使用MYSQL/PHP來從與結構兩個表看起來像下面的數據:根據表MYSQL加入檢索結果

 table A 
+---------+------------+ 
| userid | username | 
+---------+------------+ 
| 1 |  john | 
| 2 |  doe | 
| 3 |  lewis | 
+---------+------------+ 

    table B 
+---------+------------+-----------+ 
| id  |from_userid | to_userid | 
+---------+------------+-----------+ 
| 1 |  1  |  3  | 
| 2 |  3  |  2  | 
| 3 |  1  |  2  | 
| 4 |  2  |  1  | 
+---------+------------+-----------+ 

Am trying to achieve the following: 

+---------+------------+----------------------+ 
| id  |sender username| receiver username | 
+---------+------------+----------------------+ 
| 1 | john   |  lewis   | 
| 2 | lewis  |  doe   | 
| 3 | john   |  doe   | 
| 4 | doe   |  john   | 
+---------+------------+----------------------+ 

正如你所看到的,而不是返回發送者或接收者的用戶ID,我回到自己的用戶名A.

我可以在這種情況下使用左或右連接嗎?在此先感謝

回答

3

試試這個

SELECT b.id, sender.username AS sender_username, receiver.username AS receiver_username 
FROM tableB AS b 
    JOIN tableA AS sender ON b.from_userid = sender.userid 
    JOIN tableA AS receiver ON b.to_userid = receiver.userid 
+0

我沒有測試這個,但它應該工作。它使用'INNER JOIN's,我認爲總是有一個「from」和「to」,這些記錄總是存在於'tableA'中。 – cambraca 2011-12-22 17:36:12

+0

「from」和「to」在表A中不存在。表B在提交表單時獲取「from_userid和to_userid」的值。表A中包含的字段是嚴格用戶名和用戶名。你懷疑這裏有錯誤的數據庫設計嗎? – user1112155 2011-12-22 17:40:26

+0

不知道你在問什麼。這個查詢只獲得表A的用戶名。查看'ON'子句,第一個表示表B的'from_userid'字段應該與'sender'表(即表A)中的'userid'字段匹配。第二個是相似的。數據庫設計對我來說看起來不錯 – cambraca 2011-12-22 17:45:01

0

聯接內將正常工作,您需要做的僅僅兩個人...... 左,右連接時,才需要當你想從一個得到所有記錄表和一些從另一個表。在這種情況下,您有兩個不同的關係,因此需要兩個連接。我的MySQL技能有點生疏,所以我不知道'或[用作表格/字段名稱中帶有空格的分隔符。

Select t1.ID, T1.userName as 'Sender userName', T2.username as 'Receiver username' 
FROM [Table A] A 
INNER JOIN [Table B] T1 
    on T1.from_userid = A.userID 
INNER JOIN [Table B] T2 
    on T2.to_userid = A.userID