检索由sql,mysql共享的其他用户帖子

时间:2018-06-19 20:43:17

标签: mysql sql

我有这样的安排:

我想检索关注者共享的所有帖子,请记住那些共享的帖子不属于另一个关注者或主要关注者。

表格用户

id_user | name
15      Joe
16       Dan
17       Tom

表社区

id_follower | followed  
15              16
15              17

表格帖子

id_post | id_user | post    
    1       15          hi1     
    2       16          hi2    
    3       15          hi3   
    4       17          hi4      
    5       15          hi5   
    6       16          hi6   
    7       17          hi7  
    8       18          hi8   
    9       14          hi9  

我要添加一个新表“ shares”。

表格共享

id_sharer | id_post
16        4     
14        8 
17        8       
16        9    

期望的输出帖子

17        8  hi7 (shared by Tom)    
16        9  hi6  (shared by Dan)    

sql查询应该如何获得这种新的安排?

我正在考虑添加一行LEFT JOIN shares l ON l.id_sharer=p.id_user

SELECT p.*,
FROM posts p
LEFT JOIN users u ON u.id_user=c.id_followed
LEFT JOIN shares l ON l.id_sharer=c.id_followed
LEFT JOIN community c ON c.id_follower=p.id_user
WHERE p.id_user=15
ORDER BY p.date_post DESC

*已测试,但未按预期检索

2 个答案:

答案 0 :(得分:1)

这是您的第一个难题:

SELECT p.id_post, p.id_user, p.post, IF(l.date_like IS NOT NULL, l.date_like, p.date_post) AS date, l.id_liker
FROM posts p
LEFT JOIN likes l ON l.id_post = p.id_post
LEFT JOIN users u ON u.id_user = l.id_liker
ORDER BY l.date_like DESC
GROUP BY p.id_post

作为快速了解我如何解决问题的方式,首先,我像您一样,先将喜欢的对象加入并按降序排列。然后,我对帖子ID进行分组,以确保每个帖子仅获得一行。然后在选择器中,我要检查喜欢的日期是否为空,并替换帖子的日期,而不是没有喜欢的最新日期。

更新

这应该添加逻辑以确保只有关注者的人数才能计数。由于一个人可能无法跟随自己,因此这也应该使自己的喜好不会影响位置。

SELECT p.id_post, p.id_user, p.post, IF(l.date_like IS NOT NULL, l.date_like, p.date_post) AS date, l.id_liker
FROM posts p
LEFT JOIN likes l ON l.id_post = p.id_post
LEFT JOIN users u ON u.id_user = l.id_liker
LEFT JOIN community c ON l.id_liker = c.followed
WHERE c.id_follower = 15
ORDER BY l.date_like DESC, p.date_post DESC
GROUP BY p.id_post

答案 1 :(得分:0)

我知道'TABLE POSTS'.'id_user'是帖子的作者,并且与'TABLE USERS'.'id_user'相匹配,并且您希望先查看'TABLE LIKES'中具有条目的帖子,然后再查看所有其他条目。< br /> 因此,我建议以下JOINORDER BY

select p.*, l.date_like, u.* from posts p 
left join likes l on p.id_post=l.id_post
left join users u on l.id_liker=u.id_user
order by l.date_like desc, p.date_post desc