我正在为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进行排序?
答案 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
我假设id
和postid
彼此相关,并且您想要返回comments
表中的所有字段,也可能是总票数。< / p>