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' (或任何列名称)。

    链接地址: http://www.djcxy.com/p/95047.html

    上一篇: MySQL: 3 table join query?

    下一篇: How to show the last queries executed on MySQL?