簡體   English   中英

MySQL: ORDER BY A COUNT of rows from another table?

[英]MySQL: ORDER BY a COUNT of rows from another table?

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

非常感謝!

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`

但是,在某些情況下,您根本不必使用子查詢。

了解表格的結構可能會有所幫助。 我建議類似的解決方案。

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;

如果我理解正確,您根本不需要子查詢

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_muscles

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM