2013-02-14 95 views
0

我有一段時間沒有使用純mySQL,看起來像我忘了它。悲劇。 現在我有2個表格 - 圖像和投票。圖像具有唯一的ID,等等。投票表只有2個字段 - 圖像ID和用戶ID。MySQL - 通過投票排序圖像

我想獲得按票數排序的圖像列表,我有點卡在這裏。我得到的最接近的是:

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, v.uid 
FROM images as i 
LEFT JOIN 
votes as v ON i.id = v.iid 

其中返回所有具有選舉人ID的圖像。如果圖片有多張選票,則不止一次返回。

有人可以幫助我這個查詢嗎?

回答

5

您需要使用COUNTGROUP BY

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, COUNT(v.uid) 
FROM images as i 
    LEFT JOIN votes as v ON i.id = v.iid 
GROUP BY i.uname, i.title, i.time, i.description, i.id, i.extension 
ORDER BY Count(v.uid) DESC 

至於建議,你不必GROUP BY在MySQL中所有的輸出字段 - 只用你的唯一標識符,在這種情況下,i.id 。

+2

+1,但爲什麼用組列?建議只使用'group by i.id' – 2013-02-14 12:33:50

+0

@SuhelMeman - 我來自SQL Server後臺,你必須提供所有的字段 - 但是,你是對的,MySQL並不需要所有字段 - 只是那些獨一無二 - 謝謝! – sgeddes 2013-02-14 12:34:54

+0

你隨時歡迎..如果你願意,編輯你的答案 – 2013-02-14 12:36:09

0

嘗試:

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, count(*) votes 
FROM images as i 
LEFT JOIN votes as v ON i.id = v.iid 
group by i.id 
order by 7 

- 由這麼多的(從最低到最高order by 7後添加desc更改排序順序是從最高到最低。)