MySQL:3表连接查询?
我有三个表格(用户,朋友,帖子)和两个用户(user1和user2)。
当user1将user2添加为朋友时,则user1可以像在Facebook上一样查看user2的帖子。 但是只有user1将user2添加为朋友的日期之后的帖子。 我的查询是这样的:
$sql = mysql_query("SELECT * FROM posts p JOIN friends f ON
p.currentuserid = f.friendid AND p.time >= f.friend_since OR
p.currentuserid='user1id' WHERE f.myid='user1id'
ORDER BY p.postid DESC LIMIT 20");
它一路运行良好,但有一点问题..... !! 它显示user2,user3(所有的用户作为user1的朋友)帖子一次,但显示user1帖子多个.......即
user2. hi
user1. userssfsfsfsfsdf
user1. userssfsfsfsfsdf
user3. dddddddd
user1. sdfsdsdfsdsfsf
user1. sdfsdsdfsdsfsf
但我在数据库中它是单一入境/后为什么它正在发生........ !!
我该如何解决它?
我不是SQL专家,但我认为你的问题处于JOIN状态。 我无法看到你如何与帖子和朋友一起加入,并获得你需要的结果。 一位SQL专家可能知道这一点,但对我来说这太困难了。
如果我是你,我会分解成两部分:
选择用户自己的帖子
选择用户的朋友的帖子
例如,你可以通过使用2个不同的条件来做到这一点,并在子查询中与朋友表进行连接(我还没有测试过!):
select *
from posts p
where
p.currentuserid = 'user1id'
or
p.postid in
(
select p2.postid
from posts p2
join friend f on p2.currentuserid = f.friendid
where p2.time >= f.friend_since and f.myid='user1id'
)
另一种方法是使用联合(也未测试..):
select *
from posts p
where
p.currentuserid = 'user1id'
union
select p2.*
from posts p2
join friend f on p2.currentuserid = f.friendid
where p2.time >= f.friend_since and f.myid='user1id'
我认为,最简单的解决方案是在列posts.userId上使用GROUP BY语句来删除重复条目。 但是这并不是解决问题的最佳方式。
你得到所有user1的朋友的帖子的原因是你不符合查询应该返回哪个朋友的帖子。
在WHERE
子句之前添加一个f.friendid = 'user2id'
(或任何列名称)。