2013-05-29 56 views
1

我有一個數據庫,其中包含一些圖片數據和一個鏈接表。該表是堆積這樣的:Mysql select max maximum value values

---pictures--- 
picid Lat Lon 
1  5 6 
2  7 31 
3  31 43 
4  -3 35 

---user2pictures--- 
picid userid vote 
1  1  1 
1  2  1 
3  1  -1 
3  2  1 
4  2  -1 

表圖片包含圖片ID和有關圖像的一些數據,表格user2votes包含圖像數據投票。每個用戶都可以對圖像進行投票,但他們只能投1次,所以投票結果可能是1(喜歡)或-1(不喜歡)。

我想從圖片表中選擇具有最高票數的圖片中的所有內容。僞查詢可能更好地解釋我想要的: SELECT * FROM pictures WHERE (SELECT MAX(SUM(vote)) FROM user2pictures LIMIT 12

在此示例中,圖片1將返回頂部,圖片3將隨後,圖片4將作爲最後一張。我真的不知道如何解決這個問題,一些幫助正確的方向將非常感謝!

謝謝!

回答

4

答案是JOIN表,SUM票,並ORDER高到低的票數總和

SELECT pictures.*, SUM(user2pictures.vote) AS VoteTotal 
FROM pictures 
JOIN user2pictures ON pictures.picid = user2pictures.picid 
GROUP BY pictures.picid 
ORDER BY VoteTotal DESC 
LIMIT 12 
+0

非常感謝你非常快速的回答,完美的作品! – Jef

4

試試這個

select p.`picid`, `Lat`, `Lon` from pictures p 
    inner join user2pictures u2p 
    on p.picid = u2p.picid 
    group by u2p.picid 
    order by sum(vote) desc 
    limit 12 

DEMO

+0

感謝您的輸入!也感謝演示,我不知道這樣的東西存在,對測試非常有用。 – Jef

+1

歡迎您! :)。 –

2

我假設你也想顯示沒有投票的圖片。所以,你可以試試這個:

select 
    p.picId, sum(v.vote) as votes 
from 
    pictures as p 
    left join user2pictures as v on p.picId = v.picId 
group by 
    p.picId 
order by 
    sum(v.vote) desc 
limit 12; 

left join是什麼讓你展示的圖片,沒有票(列votes將具有價值0

希望這有助於

+0

感謝您的輸入:) – Jef