我有一个包含一些图片数据和链接表的数据库。这些表是这样构建的:
---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将返回到最后一个。我真的不知道如何解决这个问题,一些正确方向的帮助将非常感谢!
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
)
希望这有帮助