我知道有很多关于子查询的问题。我已经阅读了很多这些内容,并试图根据我的需要使用答案,但由于某些原因我无法使其发挥作用。
我的表包含练习结果列表。 " bruger_id"是用户ID " prog_oevelse_id"是练习的ID " kg_km"是用户提升了多少公斤或距离 " reps_tid"是用户提取公斤数或使用了多少分钟的次数。
这是我的表:
我需要它列出他表现最佳的用户结果,但每次练习只有一个。我尝试过:
$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>";
}
它给了我这个结果:
我的预期输出是:
有人可以帮帮我吗?
答案 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