0
我在這裏搜索了很多,但無法找到類似的主題:我需要在Arel中編寫查詢,因爲我使用will_paginate來瀏覽結果,所以我在使用原始SQL執行時會失去很多的安慰。加入在Arel中分組的子查詢?
這裏就是我需要阿雷爾拼寫:
SELECT m.*
FROM messages m
JOIN (SELECT tmp.original_id as original_id,
max(tmp.id) as id
FROM messages tmp
WHERE tmp.recipient_id = ?
GROUP BY tmp.original_id) g ON (m.id = g.id)
ORDER BY m.updated_at DESC;
解釋簡單的字:子查詢檢索的所有郵件的用戶。如果消息具有較新的回覆(在回覆中我將引用消息ID保存爲original_id),較舊的回覆將被忽略。對於所有這些消息的結果,我希望Rails爲我提供相關對象。
我在SQL方面非常熟練,但不幸與Arel沒有關係。任何幫助將不勝感激。
有趣的想法。儘管這可能會起作用,但我出於性能原因選擇了另一個選項,並讓數據庫通過觸發器功能預先計算最新的答覆。謝謝你的努力。 – 2012-04-21 14:19:54
當您像這樣鏈接調用時,只有一個選擇查詢發佈到數據庫。 (因爲它們在一個範圍內執行)。您可以從服務器日誌中觀察到這一點。我只是提到這一點,以防萬一您正在考慮發出多個選擇查詢。 – Salil 2012-04-22 15:19:38