1

假设我有一个网站,用户注册,上传他们的图片并给彼此的图片打分。

这是 3 个主表

users
id , username

images
id , image_name , user_id

scores 
voter_id , image_id

我想获得那些他们上传的图片得分最高的用户(全部一起)......如果你愿意的话,按得分排名最高的用户

我认为最好的方法是更改​​用户表,例如

users
id , username , image_Scores

并计算每次投票的用户得分并将其存储在image_Scores列中,但我没有写这个网站,它已经有几千张图片,我不打算在短时间内这样做。

有没有办法让当前数据结构获得最高图像分数的用户?

4

2 回答 2

2
SELECT u.id, 
       u.username,
       count(s.voter_id) as votes
  FROM users u
       images i,
       scores s
 WHERE i.user_id = u.id
   AND s.image_id = i.id
 ORDER BY 3 DESC
 LIMIT 10
于 2013-05-26T13:52:39.843 回答
0
SELECT 
   u.id, u.username, COUNT(*) as image_Scores
FROM
   users u
       LEFT JOIN images i ON (u.id = i.user_id)
       LEFT JOIN scores s ON (i.id = image_id)
GROUP BY
   u.id, u.username
ORDER BY
   COUNT(*) DESC
LIMIT 3
于 2013-05-26T13:52:55.537 回答