2012-01-06 101 views
0

我有以下两个表格MYSQL连接查询作为朋友表

CREATE TABLE accounts (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(255) NOT NULL 
); 

CREATE TABLE friends (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
account_id INTEGER UNSIGNED NOT NULL, 
friend_id INTEGER UNSIGNED NOT NULL, 
created_on TIMESTAMP NOT NULL 
); 

我建立了一个连接查询这样:

SELECT accounts.name, accounts.id, friends.account_id FROM accounts 
RIGHT JOIN friends ON accounts.id = friends.account_id 
ORDER BY accounts.name LIMIT 10; 

它看起来是这样的:

迈克芬威| 1 | 3 |

Jim Morison | 3 | 1 |

的问题是,这样的结果似乎是那样我怎么显示朋友的名字:

迈克芬威| 1 |吉姆莫里森| 3 |

Jim Morison | 3 |迈克芬威| 1 |

回答

2

您需要进一步加入才能获取好友数据。我已经使用LEFT JOIN总是返回该帐户,即使没有朋友。一个INNER JOIN将只返回有朋友的帐户,并省略那些没有朋友的帐户。

SELECT A.id, A.name, ACC.id `friendId`, ACC.name `friendName` 
FROM accounts A 
LEFT JOIN friends F ON A.id = F.account_id 
LEFT JOIN accounts ACC ON F.friend_id = ACC.id 
ORDER BY A.name LIMIT 10; 
0
SELECT 
    MainAccount.Name as OwnerName, 
    MainAccount.ID as OwnerID, 
    COALESCE(AnotherMain.Name, '') as FriendName 
    COALESCE(Friends.ID, '') as FriendID 
FROM 
    Accounts as MainAccount 
     LEFT JOIN Friends ON 
      MainAccount.ID = Friends.ID 
     LEFT JOIN Accounts as AnotherMain ON 
      Friends.ID = AnotherMain.ID 
ORDER BY MainAccount.Name LIMIT 10