检索followeds sql、mysql共享的其他用户帖子
我有这样的安排: 我想检索followeds共享的所有帖子,记住这些共享帖子不属于其他followeds或主要追随者 表格用户检索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
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)作为日期