2011-12-22 98 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