我在another thread中有一些关于从MySQL中的2个表中提取数据的问题的帮助,看来我需要内连接。
我的表格:
USERS
--id (int)
--username (varchar)
USER_FOLLOW
-- id (int)
-- follower (int)
-- user (int)
-- subscribed (current_timestamp)
查询,$ following =
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。
我需要显示我关注的用户名以及我关注的用户名。我出于某种原因目前使用的代码显示 me 3次而不是我正在关注的3个人:
while($apple = mysql_fetch_array($following)){
echo '<a href="'.$apple['user_name'].'">'.htmlspecialchars($apple['user_name']).'</a> ';
}
很抱歉打开另一个帖子,我已经盯着它好几个小时了,我无法理解它。
答案 0 :(得分: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
列...
答案 1 :(得分: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;
查询将检索人 user = 1 正在关注 user = 1
的人答案 2 :(得分:-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