检索followeds sql、mysql共享的其他用户帖子

检索followeds sql、mysql共享的其他用户帖子,mysql,sql,Mysql,Sql,我有这样的安排: 我想检索followeds共享的所有帖子,记住这些共享帖子不属于其他followeds或主要追随者 表格用户 id_user | name 15 Joe 16 Dan 17 Tom id_post | id_user | post 1 15 hi1 2 16 hi2 3 15 hi3 4

我有这样的安排:

我想检索followeds共享的所有帖子,记住这些共享帖子不属于其他followeds或主要追随者

表格用户

id_user | name
15      Joe
16       Dan
17       Tom
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  
id_sharer | id_post
16        4     
14        8 
17        8       
16        9    
表格社区

id_follower | followed  
15              16
15              17
表格帖子

id_user | name
15      Joe
16       Dan
17       Tom
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  
id_sharer | id_post
16        4     
14        8 
17        8       
16        9    
我正在加一张新的“股票”表

表格共享

id_user | name
15      Joe
16       Dan
17       Tom
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  
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查询应该如何获得这种新安排

我在考虑添加一行
左JOIN shares l ON l.id\u sharer=p.id\u 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

*已测试但未按预期检索

我了解
'TABLE POSTS.'id\u user'
是帖子的作者,与
'TABLE USERS.'id\u user'
匹配,并且您希望先查看
'TABLE LIKES'中包含条目的帖子,然后查看所有其他帖子。
因此,我建议以下
JOIN
orderby

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

这是给你的第一个机会:

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上分组,以确保每个帖子只获得一行。然后在选择器中,我检查like日期是否为null,如果没有like,则替换为帖子的日期,而不是最近的like

更新

这应该增加逻辑,以确保只有追随者这样的人才算。因为一个人可能无法跟随自己,这也应该防止自己的喜好影响自己的立场

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

……有人吗?令人困惑的是,你似乎把喜欢的日期和发布的日期放在同一列。对您试图在示例输出中执行的操作进行一些澄清可能会有所帮助。例如,喜欢发帖可能是一种多对一的关系。你想在同一条线上展示所有喜欢的人吗?好的。是的,我想在同一列中显示date_like&date_post,并根据它对结果进行排序。如果没有喜欢,则此列中没有喜欢的日期。一个帖子有多少人喜欢并不重要。最重要的是如何得到这个<代码>在同一列中显示类似日期和发布日期如果有多个喜欢,您是否只想要最近的一个?或者你想要每一个?最近的一个。我想你说到点子上了。谢谢。好的,我试过了。我需要按l.date添加
订单,如DESC、p.date\u post DESC
,以使其按预期工作。第一种方法是有效的,谢谢你…好吧,然后有一个问题,当我,作为一个用户(id_user=15)喜欢任何帖子(我没有被关注)时,结果会重新排列,使这篇帖子得到喜欢的日期并登上榜首,因为我没有被关注,在被我喜欢后,这个帖子必须保持在原来的位置。因此,要澄清的是,如果我正在查看一个帖子提要,而我不关注的人喜欢某个东西,那么他们的喜好不应该影响我看到的帖子的顺序。对吗?我更新了答案以适应这个参数。让我知道它是否有效。看起来很有希望,但它没有按预期恢复。我认为这是关键<代码>如果(l.date\u like不为空,l.date\u like,p.date\u post)作为日期