2012-12-27 53 views
-1

我試圖返回前三名用戶提供最上傳。然後我有一個計數來計算三個最高用戶中每一個的上傳數量。現在它只返回一個用戶,並且統計所有上傳,即使上傳不屬於該用戶。左外連接不能正常工作

這是我的表設置:

上傳:(ID,用戶ID,名稱,位置,類型)

用戶:(ID,FNAME,LNAME,用戶名,頭像,國家,PW)

SELECT u.id, u.userID, COUNT(us.id) as top_nums, us.username, us.avatar, us.country 
FROM upload u LEFT OUTER JOIN user us ON us.id=u.userID 
ORDER BY top_nums DESC LIMIT 3 

在此先感謝您的幫助!

+2

解釋樣本數據 –

+0

具體什麼不正常? – StilesCrisis

+0

如果你想更進一步閱讀,你會看到這個問題。 – KraigBalla

回答

1

我覺得這個查詢解決您的問題:

SELECT us.id, us.username, us.avatar, us.country, COUNT(u.id) top_nums 
FROM `user` us 
LEFT JOIN upload u ON us.id = u.userId 
GROUP BY u.userID 
ORDER BY top_nums DESC LIMIT 3; 
+0

謝謝,我將GROUP BY從u.id更改爲u.userID,它工作正常 – KraigBalla

0

你缺乏在查詢GROUP BY條款,

SELECT u.id, u.userID, COUNT(us.id) as top_nums, us.username, us.avatar, us.country 
FROM upload u 
     LEFT OUTER JOIN user us 
      ON us.id=u.userID 
GROUP BY u.id, u.userID, us.username, us.avatar, us.country 
ORDER BY top_nums DESC 
LIMIT 3 

但裸記住,這個查詢不會走關係的照顧。

0

我想你想這樣做:

select  u.id, u.fname, u.lname, count(*) 
from  user u 
left outer join upload up on u.id = up.userid 
group by u.id, u.fname, u.lname 
order by count(*) desc 
0
select us.username, us.avatar, us.country , 
(select count(*) from upload u where u.id=us.id) as no_of_uploads 
from users us order by 4 desc limit 3;