我目前正在实现以下查询,以获取数据库中具有与用户共同的特定兴趣标签的所有帖子,并通过发布的时间对这些帖子进行排序。我现在的查询工作完美。但是,我正在计划一种排序工具,供用户按分数(按喜欢或不喜欢的方式计算)对帖子进行排序。
SELECT DISTINCT p.* FROM posts AS p
INNER JOIN post_tag AS posttag ON p.post_id = posttag.post_id
INNER JOIN profile_tag AS profiletag ON posttag.tag_id = profiletag.tag_id
INNER JOIN profile AS profile ON profile.profile_id = profiletag.profile_id
WHERE profile.username = 'username'
ORDER BY time_posted DESC
现在,喜欢的内容保存在“Likes”表中,其中包含以下列:
post_id | score
因此,当用户对帖子进行评分时,post_id
和score
会添加到此表中,因此并非每个帖子都会有分数。我坚持采取哪些措施来实现按分数对帖子进行排序的能力。
没有得分的帖子将为0。
编辑:
一个例子:
post_id|score
1 1
1 1
2 1
所以帖子1共有2个喜欢,帖子有1个,所以它会根据每个帖子的总和进行排序。
答案 0 :(得分:1)
您应该能够在没有向SELECT语句添加任何内容的情况下INNER JOIN Likes表。然后,你可以按它排序:
SELECT DISTINCT p.* FROM posts AS p
INNER JOIN post_tag AS posttag ON p.post_id = posttag.post_id
INNER JOIN profile_tag AS profiletag ON posttag.tag_id = profiletag.tag_id
INNER JOIN profile AS profile ON profile.profile_id = profiletag.profile_id
INNER JOIN Likes AS l ON l.post_id = p.post_id
WHERE profile.username = 'username'
ORDER BY l.score, time_posted DESC