我有一个应用程序,我必须显示用户的活动。关于重复录入/活动,我面临一个问题。首先,我描述了我的架构:
CREATE TABLE `testDb`.`UserFriends` (
`Pk` INT NOT NULL AUTO_INCREMENT,
`Userid` INT NULL,
`Friendid` INT NULL,
PRIMARY KEY (`Pk`));
CREATE TABLE `testDb`.`UserActivities` (
`Pk` INT NOT NULL AUTO_INCREMENT,
`Userid` INT NULL,
`Friendid` INT NULL,
`ActivityType` TINYINT(1) NULL,
PRIMARY KEY (`Pk`));
将一些虚拟数据插入表中。
INSERT INTO UserFriends(Userid, friendid )
values (7,105), (7,92)
INSERT INTO UserActivities(Userid, friendid )
values (92, 1054), (105,2014), (92,105)
我在UserFriends表中有一个用户(pk-7)和2个朋友(例如id no(s)105& 92)。有一些活动由用户(例如,7)及其朋友完成。用户92已经成为用户1054的朋友,用户105已经将用户2014添加为朋友并且用户92和用户105也成为朋友。现在我必须向用户7展示他/她的活动。我创建了一个查询,该查询对用户自己以及所有朋友的所有活动都进行了罚款。这是查询:
select ua.pk activityid,
if(uf.Friendid = ua.userid, ua.userid, ua.Friendid) myfriend,
if(uf.Friendid = ua.Friendid, ua.Friendid, ua.Userid) friend_of_friend
from UserFriends uf
inner join UserActivities ua on uf.Friendid = if(uf.Friendid = ua.userid, ua.userid, ua.Friendid)
where uf.userid = 7
我的结果如下:
activityid, myfriend, friend_of_friend
1, 92, 1054
2, 105, 2014
3, 105, 92
3, 92, 105
请仔细检查结果,由于加入,活动ID 3会有重复记录。用户7有两个朋友(例如92,105),所以它来了两次。我只想要一个记录。我不知道如何删除/删除此记录。我的原始查询有6-7表连接, 活动 表有大约600000条记录, 用户友情 表大约有200000条记录。所以我也要考虑表现。 请有人帮我解决这个问题。 谢谢。
答案 0 :(得分:1)
尝试添加GROUP BY activityid
where uf.userid = 7
GROUP BY activityid
答案 1 :(得分:0)
您可以查看此查询
select DISTINCT ua.pk activityid,
if(uf.Friendid = ua.userid, ua.userid, ua.Friendid) myfriend,
if(uf.Friendid = ua.Friendid, ua.Friendid, ua.Userid) friend_of_friend
from UserFriends uf
inner join UserActivities ua on uf.Friendid = if(uf.Friendid = ua.userid, ua.userid, ua.Friendid)
where uf.userid = 7
我在ua.pk
之前使用了一个不同的关键字。