【发布时间】:2014-05-28 01:00:34
【问题描述】:
我有 3 张桌子:
用户活动日志
id userid activity_type activity_id date
它将存储所有用户活动。
请求好友
opid userid friendid requesttime message source requesttype friendemail status
这将存储朋友的详细信息。 userid 和 friendid 可以是用户的 id。如果用户 A 向用户 B 发送了好友的请求,那么 userid 将包含 A 的 id 而 friendid 将是 B 的 id。所以无论如何 B 是 A 的朋友A是B的朋友。
auth_user_profiles
id user_id first_name last_name profileimage
存储用户个人资料信息。
我需要的是从 useractivitylog 表中选择我所有的朋友活动。我尝试了以下查询。但是没用。
echo "select ua.*,rf.opid,aup.user_id,aup.first_name,aup.last_name,
aup.profileimage from useractivitylog as ua INNER JOIN requestfriend as rf
INNER JOIN auth_user_profiles as aup on
aup.user_id= IF (rf.userid='$userid',rf.friendid,rf.userid)
WHERE (rf.userid=$userid or rf.friendid=$userid)
and rf.status='2' and ua.userid!=$userid";
这里,$userid 是我的用户 ID。实际上我想要的是检索我的朋友用户的个人资料信息和活动。但是要知道,即使 userid 不在我的朋友列表中,它也会返回 useractivitylog 表中的所有行。
谁能帮我找到一个合适的查询。提前致谢。
【问题讨论】:
-
你能解释一下但它没有用吗?任何错误或其他问题
-
即使 useractivitylog 表中的用户不是我的朋友,它也会返回所有行。
-
您有两个 JOIN,但 ON 子句中只有一个条件,这似乎是罪魁祸首。
-
感谢 RobP ..它与 echo "select ua.*,rf.opid,aup.user_id,aup.first_name,aup.last_name, aup.profileimage from useractivitylog as ua INNER JOIN requestfriend as rf 一起使用on (ua.userid=rf.userid or ua.userid=rf.friendid) INNER JOIN auth_user_profiles as aup on aup.user_id= IF (rf.userid='$userid',rf.friendid,rf.userid) WHERE (rf .userid=$userid 或 rf.friendid=$userid) 和 rf.status='2' 和 ua.userid!=$userid";
标签: php mysql inner-join