2014-09-12 2 views
1

내가 잘못하고있는 것이 확실하지 않습니다.남겨진 MySQL의 잘못된 카운트 값

이 작동하고

SELECT recipes.RecipeID, 
     recipes.Name, 
     recipes.RatingTotal, 
     recipes.ImageBig, 
     users.Email, 
     users.FullName, 
     users.UserImageBig, 
     COUNT(ratings.RecipeID) AS trates 
FROM recipes 
     LEFT JOIN users 
       ON recipes.User = users.Email 
     LEFT JOIN ratings 
       ON ratings.RecipeID = recipes.RecipeID 
GROUP BY RecipeID 
ORDER BY RecipeID DESC 
LIMIT 3 

이 이 (조리법의 목록과 총 금액을 얻기 작동하지 않습니다 (조리법의 목록과 등급 테이블에 평가의 총량을 가져 오기) 결과 를 원하는 낸다 2 개의 댓글, 그것은 실제 수의 4 배를 반환있을 경우 등급 테이블뿐만 아니라 의견의 총 수에서 평가의. 쿼리 실행되지만 값이

SELECT recipes.RecipeID, 
     recipes.Name, 
     recipes.RatingTotal, 
     recipes.ImageBig, 
     users.Email, 
     users.FullName, 
     users.UserImageBig, 
     COUNT(ratings.RecipeID)  AS trates, 
     COUNT(recipecomments.RecipeID) AS crate 
FROM recipes 
     LEFT JOIN users 
       ON recipes.User = users.Email 
     LEFT JOIN ratings 
       ON ratings.RecipeID = recipes.RecipeID 
     LEFT JOIN recipecomments 
       ON recipecomments.RecipeID = recipes.RecipeID 
GROUP BY RecipeID 
ORDER BY RecipeID DESC 
LIMIT 3 

) 카운트 열 잘못이다. 또한 등급이 4가됩니다.

+0

의 ID를 계산해야하고, 테이블을 recipecomments? 또한 다음 쿼리를 실행하십시오. 이메일 선택, 카운트 (*) 사용자 GROUP BY 이메일 개수 (*)> 1. – evanv

답변

2

두 번째 쿼리에서 recipecomments과 다른 왼쪽 결합을 추가 했으므로 확실히 many-to-one 관계가되어 RecipeID에 대한 반복 행이 표시되고 예상 한 결과보다 더 많은 결과가 나타납니다. 당신은 조리법, 사용자 등급에 대한 스키마를 포함하도록 질문을 편집 할 수 또한 crate에 대한 만의 고유 인스턴스를 계산하기 위해 카운트 기능에 distinct를 사용 recipecomments

SELECT recipes.RecipeID, 
     recipes.Name, 
     recipes.RatingTotal, 
     recipes.ImageBig, 
     users.Email, 
     users.FullName, 
     users.UserImageBig, 
     COUNT(DISTINCT ratings.RecipeID)  AS trates, 
     COUNT(DISTINCT recipecomments.ID) AS crate 
FROM recipes 
     LEFT JOIN users 
       ON recipes.User = users.Email 
     LEFT JOIN ratings 
       ON ratings.RecipeID = recipes.RecipeID 
     LEFT JOIN recipecomments 
       ON recipecomments.RecipeID = recipes.RecipeID 
GROUP BY RecipeID 
ORDER BY RecipeID DESC 
LIMIT 3 
+1

감사합니다. 매력처럼 작동합니다! –

+0

오른쪽, 상자, 운율 및 운임이 1보다 큰 값을 반환하지 않음 –

+0

@ ZaidKajee는'trates' count'ratings에 대해 샘플 데이터 세트를 제공하는 것을 고려합니다 (http://sqlfiddle.com/). '이드는 무엇이고'frate'는 무엇입니까? 이 질문에 대한 설명이 없습니다. 게시물을 업데이트하십시오. –