2011-07-19 16 views
0
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が何であるか分からないため、動作しません。MySQL:別のテーブルの行数を注文しますか?

私の結果を正しく注文するためにこのクエリをどのように入手できるかに関するアイデアはありますか?ありがとう!

編集:は、Randyの有益なコメントの後でこれを思いついた。

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 

ありがとうございました!

+1

でサブクエリを必要としません。その最も内側のクエリを2つのレイヤーまで引き上げ、演習でそれに参加してください。 – Randy

答えて

0

テーブルがどのように構造化されているかを知ることは役に立ちます。私はこれに似た解決策を提案します。

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; 
0

MySQLのSQLサブクエリには、「ローカルネームスペース」のようなものがあります。私はテストする能力を得たhaven`tていますが、このような何かを探してすることができる。

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` 

しかし、いくつかのケースでは、あなたがすべてでサブクエリを使用する必要はありません。

+0

同じエラー:内側のクエリと同じように見えますが、外側のクエリがありません – Garrett

+0

ああ、実のところコードをコピーして貼り付けました。コードが更新されました。それは本当に必要ですか? – Timur

0

私が正しく理解していれば、あなたはこれを再構築するために必要なすべての

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 
関連する問題