我有兩個型號:這可能在一個查詢中完成嗎?
class User
end
class Message
belongs_to :sender, :class_name=> 'User'
belongs_to :recipient, :class_name=> 'User'
end
我希望獲取通過最新消息的日期是什麼給用戶和他的好友和之間出現在談話下令給定用戶的所有好友,如果有可能的相同的查詢,以獲取其對話中的消息數量。
現在,我被困在此:
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'
該查詢產生這樣的輸出:
一)
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記錄提取但我需要user2,user3和user4記錄在特殊情況下當user1只發送消息給他的好友。
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
在情況B,否則,我有什麼,我想有 - 通過最新的消息顯示的內容在給定的用戶和他的朋友之間的談話日期排序,所有三個哥們。
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'。 – 2010-03-10 11:55:12
謝謝,拼寫錯誤 – yukas 2010-03-10 13:27:46