改变我的MySQL查询以实现排序

时间:2013-04-15 21:34:44

标签: mysql

我目前正在实现以下查询,以获取数据库中具有与用户共同的特定兴趣标签的所有帖子,并通过发布的时间对这些帖子进行排序。我现在的查询工作完美。但是,我正在计划一种排序工具,供用户按分数(按喜欢或不喜欢的方式计算)对帖子进行排序。

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_idscore会添加到此表中,因此并非每个帖子都会有分数。我坚持采取哪些措施来实现按分数对帖子进行排序的能力。

没有得分的帖子将为0。

编辑:

一个例子:

post_id|score
    1     1
    1     1 
    2     1

所以帖子1共有2个喜欢,帖子有1个,所以它会根据每个帖子的总和进行排序。

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