2014-01-09 144 views
0

我正在將我們的管理系統從PHP遷移到Ruby On Rails。有舊系統中使用SQL建立客戶名單,然後由他們最後聯繫的時間順序其中的一部分:通過自定義選擇欄訂購

SELECT 
     `customer`.*, (
     SELECT MAX(`date`) 
     FROM `customer_contact` 
     WHERE `customer`.`Customer_ID`=`customer_contact`.`customer_id` 
     ORDER BY `date` DESC 
     LIMIT 1 
    ) AS `last_contacted` 
    FROM 
     `lead_details` 
    GROUP BY `customer`.`Company_Name` 
    ORDER BY `last_contacted` 
    LIMIT 50 

customer表,現在是在Customer模型和customer_contact現在在CustomerCallback模型中。我想使用rails構建一個類似的列表,最好不使用原始SQL。目前有大約1萬個客戶記錄,所以我現在想要做到的方式(吸引所有客戶,檢查他們的最後一個聯繫人,然後訂購一個數組)將會非常低效。

任何指針?

因此,它會根據其子女的最高日期排列客戶列表,然後限制停止吸引10,000個記錄,如上面的SQL。

我apoligise如果這是很難理解的,但很難言喻

回答

1

因爲這是如此定製,我會建議使用select_rows,如:

customers = Customer.connection.select_rows("SELECT 
    `customer`.*, (
     SELECT MAX(`date`) 
     FROM `customer_contact` 
     WHERE `customer`.`Customer_ID`=`customer_contact`.`customer_id` 
     ORDER BY `date` DESC 
     LIMIT 1 
    ) AS `last_contacted` 
    FROM 
    `lead_details` 
    GROUP BY `customer`.`Company_Name` 
    ORDER BY `last_contacted` 
    LIMIT 50") 
+0

感謝工作得很好! – andy