gpt4 book ai didi

php - MySql 中的多个内部连接不起作用

转载 作者:行者123 更新时间:2023-11-29 02:25:25 24 4
gpt4 key购买 nike

我有 3 个表:

用户事件日志

id   userid   activity_type  activity_id   date

这将存储所有用户事件。

请求好友

opid  userid  friendid  requesttime  message  source  requesttype  friendemail  status

这将存储 friend 的详细信息。 useridfriendid 可以是用户的id。如果用户 A 向用户 B 发送了好友请求,那么 userid 将包含 A 的 id,friendid 将是 B 的 id。所以无论如何 B 都是 A 的好友A 是 B 的 friend 。

auth_user_profiles

id  user_id  first_name  last_name  profileimage

存储用户个人资料信息。

我需要的是从useractivitylog 表中选择我所有 friend 的事件。我尝试了以下查询。但它没有用。

    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。实际上我想要的是检索个人资料信息和我 friend 的用户的事件。但是要知道,即使 userid 不在我的好友列表中,它也会返回 useractivitylog 表中的所有行。

谁能帮我找到一个合适的查询。提前致谢。

最佳答案

您没有正确加入。将 useractivitylog 链接到其他表的唯一条件是它的用户 ID 不是 $userid。对于表中的大多数记录都是如此,因此您几乎得到笛卡尔积(交叉连接)。

顺便说一句:您也没有正确加入 auth_user_profiles,因为您与字符串 '$userid' 进行比较,而不是与 $userid 进行比较。

让我们重新编写语句,以便我们首先检索 friend 并用这些连接其他表:

select 
ua.*,
friend.opid,
aup.user_id,
aup.first_name,
aup.last_name,
aup.profileimage
from
(
select distinct
case when userid = $userid then friendid else userid end as id,
opid
from requestfriend
where $userid in (userid, friendid) and status = '2'
) as friend
inner join useractivitylog as ua on ua.userid = friend.id
inner join auth_user_profiles as aup on aup.user_id = friend.id;

关于php - MySql 中的多个内部连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com