2011-09-21 10 views
0

내가 SQL 레일 3 구문 쿼리 다음 한 SQL 쿼리와 문제 : Models 테이블에서레일 3-

variab = Model.joins(:photo).where('photos.user_id = ?', user).group('model.photo_id').count 

나는 이러한 데이터가 :

+----+----------+----------+---------------------+----------+ 
| id | photo_id | created_at   | updated_at   | 
+----+----------+----------+---------------------+----------+ 
| 31 |  210 | 2011-09-16 14:38:22 | 2011-09-16 14:38:22 | 
| 32 |  210 | 2011-09-16 14:38:22 | 2011-09-16 14:38:22 | 
| 33 |  211 | 2011-09-16 15:03:26 | 2011-09-16 15:03:26 | 
+----+----------+----------+---------------------+----------+ 

을 그리고 난을 얻으려고 값 - 고유 한 수를 가져와야합니다. photo_id 데이터입니다. 그러나 위의 SQL 쿼리를 사용하면 결과는 ** 21022111 **입니다. 이해할 수 없습니다.이 숫자의 의미는 ... 이되어야한다고 가정하지만, 그렇지 않습니다. 이해하지 ...

사람이이 문제를 도와 줄 수 있다면 정말 기쁠은 ... 정말 고마워요 이유

답변

2

액티브 레코드, 즉210 수를 photo_id의 photo_id이/쌍을 계산 반환 2, photo_id 211은 1을 계산합니다.

주어진 용도로 뚜렷한 사진의 수를 계산하려면 다음을 시도하십시오.

Model.select(:photo_id).where(:user_id => user.id).count(:distinct => true) 
+0

답장을 보내 주셔서 감사합니다. 이 예제는 나에게이 쿼리를 생성한다 :'SELECT COUNT (DISTINCT'model'.'id') FROM'model' LEFT OUTER JOIN'photos' ON'photos'.'id' ='model'.photo_id' WHERE (user_id = 2)'- 이것은 내 스크립트에서 ** ** ** 결과를 제공하지만, mysql의 터미널에서는 ** 3 **입니다. 하지만 올바른 출력은 2가되어야합니다. – user1946705

+0

아마 내가 당신의 모델을 오해하고 있습니다. 모델 또는 사진 표에 user_id가 있습니까? 그것의 사진 테이블에 다음 대답의 where 절이 잘못되었습니다. – Steve

+1

user_id 키가 사진 테이블에있는 경우 Model.select (: photo_id) .joins (: photo) .where ('photos.user_id =?', user) .count : distinct => true) – Steve