2015-02-09 81 views
0

我正在爲我的學校項目在ASPX上使用類似Stackoverflow的系統。我已經遠遠超出了老師的想法,所以我決定用愚蠢的方式倒計時和上升 - 爲每個投票選擇一個空間表。如何按其他表格訂購?

這裏是我的兩個表:

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中,選擇全部設置一個與bestanswer=1爲先,並upvotes的ammount的(2再下訂單, 1,3)?

+0

有一個名爲upvote的列,其值爲-1,這激勵我讚美你選擇形容詞。 – 2015-02-09 17:26:33

+0

這兩張表如何關聯?是Comments.ID = Votes.PostID?爲了澄清,你想要選擇評論表中的所有字段還是選擇兩個表中的所有字段? – mmarie 2015-02-09 17:27:22

+0

@mmarie是的,我希望它通過計數upvoted(如果它是加上所以加上,如果它是一個減所以減少)在「票」表中的所有coulombs與評論中的庫侖編號 – GINCHER 2015-02-09 17:32:30

回答

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表中的所有字段,也可能是總票數。

+0

如果我想添加'WHERE',我只是在'LEFT JOIN'之前像添加基本的SQL SELECT一樣添加它? – GINCHER 2015-02-09 17:36:03

+1

'WHERE'位於'ORDER BY'的正上方,除非您試圖過濾您計算的票數,在這種情況下,它位於'GROUP BY'之前 – 2015-02-09 17:36:50

+0

但如果評論沒有投票,那麼它需要處於投票評論和最新評論之間,但它顯示在底部。 – GINCHER 2015-02-21 11:53:16