SELECT e.*,
(
SELECT COUNT(*) FROM
(
SELECT tm.exerciseID FROM exercise_targetedmuscles tm
WHERE tm.exerciseID = e.exerciseID
AND tm.isPrimary = 1
AND tm.targetedMuscleID IN (4,11)
) as musclesCovered
) as numMusclesCovered
FROM exercises e
ORDER BY numMusclesCovered DESC基本上,我想按它们覆盖的目标肌肉的数量来排序(在这个例子中,目标肌肉是4和11)。但是,子查询(出于某种原因?)不知道E是什么,所以它不起作用。
对于如何让这个查询正确地排序我的结果,有什么想法吗?谢谢!
编辑:是在兰迪的有益评论之后提出来的。
SELECT COUNT(tm.targetedMuscleID) as numMusclesCovered, e.*, tm.* FROM exercise_targetedmuscles tm
JOIN exercises e ON tm.exerciseID = e.exerciseID
WHERE tm.isPrimary = 1
AND tm.targetedMuscleID IN (4,11)
GROUP BY tm.exerciseID
ORDER BY numMusclesCovered DESC太感谢了!
发布于 2011-07-19 20:33:26
了解表的结构可能会有所帮助。我建议了一个类似于此的解决方案。
SELECT e.*, tm.*, COUNT(tm.targetedMuscleID) AS coveredMuscles
FROM exercises AS e
JOIN exercise_targetedmuscles AS tm ON tm.exerciseID = e.exerciseID
WHERE tm.isPrimary = 1 AND tm.targetedMuscleID IN (4, 11)
GROUP BY e.exerciseID
ORDER BY coveredMuscles;发布于 2011-07-19 20:24:43
MySQL中的SQL子查询具有类似于“本地命名空间”的内容。我没有能力测试,但你可能在寻找这样的东西:
SELECT `data`.* FROM (
SELECT COUNT(tm.targetedMuscleID) as `count`,tm.targetedMuscleID FROM exercise_targetedmuscles tm
LEFT JOIN `exercises` as `e` ON (`tm`.`exerciseID`=`e`.`exerciseID`)
WHERE
tm.isPrimary = 1
AND
tm.targetedMuscleID IN (4,11)
GROUP BY tm.targetedMuscleID
) as `data`
ORDER BY `data`.`count`但是,在某些情况下,您根本不必使用子查询。
发布于 2011-07-19 20:38:00
如果我正确理解,您根本不需要子查询
SELECT count(tm.targetedMuscleID) as num_muscles, e.exerciseID
FROM exercise_targetedmuscles tm, exercises e
WHERE tm.exerciseID = e.exerciseID
AND tm.isPrimary = 1
AND tm.targetedMuscleID IN (4,11)
GROUP BY e.exerciseID
order by num_muscleshttps://stackoverflow.com/questions/6753541
复制相似问题