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

テーブル pictures には画像 ID と画像に関するいくつかのデータが含まれ、テーブル user2votes には画像からの投票データが含まれます。各ユーザーは画像に投票できますが、投票できるのは 1 回だけなので、投票は 1 (好き) または -1 (嫌い) のいずれかになります。

投票数が最も多い写真から写真テーブルからすべてを選択したいと思います。私が欲しいものをよりよく説明するかもしれない疑似クエリ: SELECT * FROM pictures WHERE (SELECT MAX(SUM(vote)) FROM user2pictures LIMIT 12

この例では、写真 1 が一番上に戻り、写真 3 が続き、写真 4 が最後になります。これを解決する方法が本当にわかりません。正しい方向への助けをいただければ幸いです。

ありがとう!

4

3 に答える 3

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 に答える
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 に答える
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 に答える