1

我有一个数据库,其中包含一些图片数据和一个链接表。这些表是这样建立的:

---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

3 回答 3

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
于 2013-05-29T20:27:01.637 回答
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

演示

于 2013-05-29T20:31:07.973 回答
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

希望这可以帮助

于 2013-05-29T20:33:35.013 回答