如何通过其他表订购?

时间:2015-02-09 17:18:00

标签: sql

我正在为ASPX上的学校项目开发类似Stackoverflow的系统。我已经远远超出了老师的想法,所以我决定使用愚蠢的倒计时和upvotes方式 - 每个投票都有一个空间表。

以下是我的两张表:

comments
    id | content | by    | bestanswer
    1  | demo    | Vlad  | 0
    2  | sample  | Hagay | 1
    3  | chacking| Gil   | 0
    4  | trying  | Teddy | 0
    ...| ...     | ...   | ...
votes
    postid | username | upvote
    1      | Gil      | 1
    1      | Hagay    | 1
    1      | Teddy    | -1
    2      | Gil      | -1
    3      | Vlad     | -1
    2      | Gil      | 1
    ...    | ...      | ...

我如何使用SQL,SELECT all并将bestanswer=1设置为第一个,然后通过upvotes(2,1,3)的ammount进行排序?

1 个答案:

答案 0 :(得分:3)

您可以在子查询中聚合“upvotes”,然后将JOIN聚合到该表进行排序:

SELECT c.*,v.upvotes
FROM comments c
LEFT JOIN (SELECT postid,SUM(upvote) as upvotes
           FROM votes
           GROUP BY postid
           ) v
  ON c.id = v.postid
ORDER BY c.bestanswer DESC, upvotes DESC

我假设idpostid彼此相关,并且您想要返回comments表中的所有字段,也可能是总票数。< / p>