修改MySQL查询以实现排序
目前,我实现了以下查询,以获取数据库中与用户具有共同的特定兴趣标记的所有帖子,并通过发布时间对这些帖子进行排序。我目前提出的问题非常有效。然而,我正计划为用户提供一个排序工具,以便根据分数(根据喜欢或不喜欢的内容计算)对帖子进行排序 现在,like保存在一个表“likes”中,表中有以下列:修改MySQL查询以实现排序,mysql,Mysql,目前,我实现了以下查询,以获取数据库中与用户具有共同的特定兴趣标记的所有帖子,并通过发布时间对这些帖子进行排序。我目前提出的问题非常有效。然而,我正计划为用户提供一个排序工具,以便根据分数(根据喜欢或不喜欢的内容计算)对帖子进行排序 现在,like保存在一个表“likes”中,表中有以下列: post_id | score 因此,当用户为帖子打分时,post\u id和score将添加到此表中,因此并非每个帖子都有分数。我被困在实现按分数排序帖子的能力的步骤上 一篇没有分数的文章将是0 编辑:
post_id | score
因此,当用户为帖子打分时,post\u id
和score
将添加到此表中,因此并非每个帖子都有分数。我被困在实现按分数排序帖子的能力的步骤上
一篇没有分数的文章将是0
编辑:
例如:
post_id|score
1 1
1 1
2 1
因此,post 1总共有2个like,post有1个,因此它将根据每个post的总和进行排序 您应该能够在不向SELECT语句添加任何内容的情况下对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
然后尝试按计数(分数)排序。我尝试了这个方法,但是它似乎只显示一篇文章的结果?这就是我所改变的:
orderbycount(l.score)DESC
Yikes。。。很抱歉。不知道我在想什么。试试Sum(),也许吧?不走运!当只返回一个结果时也会发生同样的情况。它似乎只返回得分最高的物品。好的。。。在SELECT语句中包含sum(分数),然后按post_id分组。
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