2011-05-29 42 views
4

我需要知道如何鏈接php/mysql中的兩個表,然後對結果進行排名?
這是我的情況。在mysql中鏈接表

我有一個故事表:

storyid 
writerid 
title 
story 
submitdate 

和投票表

voteid 
userid 
storyid 
vote 

我儲存了投票作爲1和投票下來作爲-1
我要找通過加入這兩張表格的方式,然後按照他們收到的票數排列/排序這些故事。
我願意接受任何有關如何這樣做或不同的可能的數據庫模式的想法。

回答

4

我寧願保持我的表單數名稱。這不是「故事」表;這是一個包含多行的「故事」表。

投票只能歸結爲一個故事,所以它是兩者之間的一對多關係。我會將外鍵放在投票表中,並讓它指出它所關聯的故事。如果您同意,請更改您的模式:從story表中刪除voteid,並在vote中將storyid作爲story表的外鍵。

但隨着中說,也許你可以嘗試這樣的查詢:

select stories.storyid, sum(vote=-1) as down, sum(vote=1) as up 
from stories 
inner join votes on (stories.storyid = votes.storyid) 
group by stories.storyid 

按照以下ypercube的評論更正。

+0

這是解決方案的良好基礎。但是,它會返回該故事的總投票數,而我更願意計算投票數和計票數。 – 2011-05-29 15:31:58

+1

看了一些SQL函數後,我決定使用sum()函數。基本上,如果我收到了票數的單獨值,我就可以計算出來。除了用'sum(votes.vote)'替換'count(*)'外,我使用了上面的查詢。謝謝您的幫助! – 2011-05-29 15:47:54

+1

@Drew:使用'SUM(vote)'而不是'COUNT(*)'。如果你想單獨上下投票,使用'COUNT(vote = 1)AS up'和'COUNT(vote = -1)AS'' – 2011-05-29 15:47:54