在分组之前按子顺序排序

时间:2017-11-03 13:00:02

标签: php mysql

我知道有很多关于子查询的问题。我已经阅读了很多这些内容,并试图根据我的需要使用答案,但由于某些原因我无法使其发挥作用。

我的表包含练习结果列表。 " bruger_id"是用户ID " prog_oevelse_id"是练习的ID " kg_km"是用户提升了多少公斤或距离 " reps_tid"是用户提取公斤数或使用了多少分钟的次数。

这是我的表:

enter image description here

我需要它列出他表现最佳的用户结果,但每次练习只有一个。我尝试过:

$results = $pdo->query("
          SELECT * FROM (
            SELECT * FROM myw_resultat 

            ORDER BY kg_km DESC
          ) t
        WHERE bruger_id = '$user_id'
        GROUP BY prog_oevelse_id
        "); 

但是当我用上面的查询回复:

$SL = 0;
        foreach($results as $key => $row) { 

        echo $row['prog_oevelse_id'];
        echo " - ";
        echo $row['kg_km'];
        echo " / ";
        echo $row['reps_tid'];
        echo "<br>";
        }

它给了我这个结果:

enter image description here

我的预期输出是:

enter image description here

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

 $pdo->query("
        SELECT R.prog_oevelse_id, R.kg_km, R.reps_tid
        FROM myw_resultat R
        JOIN ( SELECT prog_oevelse_id, MAX(kg_km) as m_kg_km
               FROM myw_resultat 
               WHERE bruger_id = '$user_id'
               GROUP BY prog_oevelse_id ) as M
          ON R.prog_oevelse_id = M.prog_oevelse_id
         AND R.kg_km = M.m_kg_km
        WHERE R.bruger_id = '$user_id'

答案 1 :(得分:0)

对于order by而言,这不是问题,不使用聚合函数会出现问题。

select
    prog_oevelse_id,
    max(kg_km) as kg_km,
    reps_tid
from
    myw_resultat
where
    bruger_id = 1
group by
    prog_oevelse_id,
    reps_tid
order by
    prog_oevelse_id asc

max()调用将获得分组语句中列的最高值。

进一步阅读:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html