Mysql 获得最高分数和获胜次数

Mysql 获得最高分数和获胜次数,mysql,select,join,Mysql,Select,Join,这是我的数据库。每一张照片都有一些要点,是由特定的用户拍摄的。每张照片也会分配给活动。我想找一张每场比赛得分最高的照片。我还想计算您赢得了多少比赛(例如,对于id=10的用户)。你能帮帮我吗?我不知道如何解决这个问题。这里有两个查询可以满足您的需要: 为每个事件提供最高点数的图片 看 数一数你赢了多少个项目 请看我认为您不需要所有显示的表格。看起来“点”和“照片”都是“事件”和“用户”之间的关系。“照片”和“点”之间似乎没有直接关系。图片不对。打扰一下更正。对不起,但是,表格“points”的哪


这是我的数据库。每一张照片都有一些要点,是由特定的用户拍摄的。每张照片也会分配给活动。我想找一张每场比赛得分最高的照片。我还想计算您赢得了多少比赛(例如,对于id=10的用户)。你能帮帮我吗?我不知道如何解决这个问题。

这里有两个查询可以满足您的需要:

为每个事件提供最高点数的图片

数一数你赢了多少个项目


请看

我认为您不需要所有显示的表格。看起来“点”和“照片”都是“事件”和“用户”之间的关系。“照片”和“点”之间似乎没有直接关系。图片不对。打扰一下更正。对不起,但是,表格“points”的哪个字段有点数(或者该信息保存在哪个表格中)?您询问的是两个不同的问题:一个是该事件得分最高的事件列表(但是如果出现平局怎么办?);另一个用于用户,该用户赢得的事件数为。
SELECT      e.id event_id,
            e.name event_name, 
            ph.id photo_id,
            ph.title photo_title,
            u.id user_id,
            u.login user_login,
            COUNT(*) points
FROM        events e
INNER JOIN  photos ph
        ON  ph.event_id = e.id
        AND ph.id = (
              SELECT      ph.id
              FROM        photos ph
              INNER JOIN  points p 
                       ON p.photo_id = ph.id
              WHERE       ph.event_id = e.id
              GROUP BY    ph.id
              ORDER BY    COUNT(*) DESC
              LIMIT       1
            )
-- optional if you need to know the points            
INNER JOIN  points p 
         ON p.photo_id = ph.id
-- optional if you need to know the owner of the photo
INNER JOIN  users u
         ON u.id = ph.user_id
GROUP BY    e.id,
            e.name,
            ph.id,
            ph.title
SELECT      u.id user_id,
            u.login user_login,
            COUNT(distinct e.id) events_won
FROM        events e
INNER JOIN  photos ph
        ON  ph.event_id = e.id
        AND ph.id = (
              SELECT      ph.id
              FROM        photos ph
              INNER JOIN  points p 
                       ON p.photo_id = ph.id
              WHERE       ph.event_id = e.id
              GROUP BY    ph.id
              ORDER BY    COUNT(*) DESC
              LIMIT       1
            )
INNER JOIN  users u
         ON u.id = ph.user_id
GROUP BY    u.id,
            u.login