나는 두 가지 모델이 있습니다하나의 쿼리로이 작업을 수행 할 수 있습니까?
나는 주어진 사용자와 그의 친구와 사이에 대화에 표시되는 내용을 메시지의 가장 최근 날짜순으로 특정 사용자의 모든 친구를 가져 오기 할class User
end
class Message
belongs_to :sender, :class_name=> 'User'
belongs_to :recipient, :class_name=> 'User'
end
에 가능하다면 대화에서 메시지 수를 가져 오는 동일한 쿼리.
지금, 나는이에 붙어 :
A)
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user1 | 1 | 2 | bla | bla
user1 | 1 | 3 | bla | bla
user1 | 1 | 4 | bla | bla
모델 messages.sender_id = user.id
합류 난 단지 USER1을 가지고 있기 때문에 :
Messages.all(:joins => :sender,
:conditions => ['sender_id = ? OR recipient_id = ?', some_user.id, some_user.id],
:select => 'users.*, sender_id, recipient_id, MAX(messages.created_at) as last_created, COUNT(messages.id) as messages_count',
:group => 'messages.sender_id, messages.recipient_id',
:order => 'last_created DESC'
즉, 쿼리가이 출력을 생성 레코드를 가져 왔지만 필요합니다. user2, user3 및 user4의 기록은 특별한 상황 A 일 때 사용자 1은 그의 친구들에게만 메시지를 보냅니다. 지정된 사용자와 그의 친구 사이의 대화에서 나타나는 어떤 메시지의 가장 최근 날짜별로 정렬 된 세 친구를 -
b)는 상황 B에서
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user2 | 2 | 1 | bla | bla
user3 | 3 | 1 | bla | bla
user4 | 4 | 1 | bla | bla
, 그렇지 않으면, 내가 갖고 싶은 있습니다.
c)
users.* | sender_id | recipient_id | MAX(last_created) | messages_count
user1 | 1 | 2 | bla | bla
user3 | 3 | 1 | bla | bla
user4 | 4 | 1 | bla | bla
상황 C. USER2의 USER1의 버디 원인 :joins => :sender
누락되어있다. 그렇지 않으면 :joins => :recipient
에 user3 및 user4가 누락 될 수 있습니다. 그게 크래커 야. 모델에 가입하는 것은 상관 없습니다. 하나의 쿼리에서이 상황을 어떻게 해결할 수 있습니까?
': class_name'입니다. –
감사합니다, 맞춤법이 틀린 – yukas