2012-10-16 62 views
0

我在another thread有一些關於在MySQL中從2個表中提取數據的問題上的幫助,看起來我需要內部聯接。內部聯接,關注和關注

我的表:

USERS 
    --id (int) 
    --username (varchar) 

USER_FOLLOW 
    -- id (int) 
    -- follower (int) 
    -- user (int) 
    -- subscribed (current_timestamp) 

查詢,$以下=

SELECT ufollower.id AS follower_id, 
ufollower.username AS follower_name, 
ufollowed.id AS user_id, 
ufollowed.username AS user_name 
FROM 
/* JOIN twice against users, once to get the follower and once to get the followed */ 
user_follow 
/* users aliased as ufollower to get the follower details */ 
JOIN users ufollower ON ufollower.id = user_follow.follower 
/* users aliased as ufollowed to get the followed details */ 
JOIN users ufollowed ON ufollowed.id = user_follow.user 
WHERE 
user_follow.user = $p_id 

p_id是我要找的人的個人資料ID。

我需要顯示我關注的用戶名以及我關注的用戶名。我現在有一些原因的代碼表明我3次而不是3我關注的人:

while($apple = mysql_fetch_array($following)){ 
    echo '<a href="'.$apple['user_name'].'">'.htmlspecialchars($apple['user_name']).'</a> '; 
} 

對不起,這個打開另一個線程,我一直盯着它幾個小時,我無法理解它。

+0

您需要調試您在查詢中擁有的數據。 ''var_dump($ apple)'在你的循環中查看它包含的內容。您已經在'WHERE'子句中將其限制爲一個用戶標識。 –

回答

1

一瞥,似乎正在顯示錯誤的用戶名,表現出的跟隨,而不是追隨者。你的PHP代碼更改爲以下:

while($apple = mysql_fetch_array($following)){ 
    echo '<a href="'.$apple['follower_name'].'">'.htmlspecialchars($apple['follower_name']).'</a> '; 
} 

請注意,您的查詢實際上只返回被跟隨你的用戶,它不包括您所關注的用戶(這將是那些具有user_follow.follower = $p_id)。當然,對於這些用戶,你其實希望顯示user_name列...

+0

完美,你的代碼工作!謝謝你的解釋,儘管如此,我仍然有點失落,哪些位置會出現在「跟隨我」的位置? – mobile

-1

你正在做內部連接的用戶的兩倍,而不是做一個內部的加入對ufollowed和ufollower:

SELECT ufollower.id AS follower_id, 
ufollower.username AS follower_name, 
ufollowed.id AS user_id, 
ufollowed.username AS user_name 
FROM 
/* JOIN twice against users, once to get the follower and once to get the followed */ 
user_follow 
/* users aliased as ufollower to get the follower details */ 
JOIN ufollower ON ufollower.id = user_follow.follower 
/* users aliased as ufollowed to get the followed details */ 
JOIN ufollowed ON ufollowed.id = user_follow.user 
WHERE 
user_follow.user = $p_id 
+0

在MySQL中,'JOIN'意味着'INNER JOIN'。 –

+0

哇沒有意識到,thanx信息 – Darwayne

0
SELECT f.user,u.username,f.subscribed 
FROM user_follow f inner join users u on f.user=u.id 
WHERE 
f.follower=1 
union all 
SELECT f.follower,u.username,f.subscribed 
FROM user_follow f inner join users u on f.follower=u.id 
WHERE 
f.user=1; 

查詢檢索應人用戶= 1跟隨誰是下用戶= 1

+人