2011-08-05 48 views
0

我有按primary_contact_no排序聯繫人記錄的要求。
我的聯繫人字段包含primary_contact_no,email,mobile_no。按行排序的問題(特殊情況)

這是沒有智商更高....

不過我的看法,需要我帶mobile_no聯繫電話(視圖標籤)時primary_contact_no不存在。

Contacts.find(:all, :order => "primary_contact_no") 

現在,當我通過對其進行排序primary_contact,在視圖中,這些字段是不存在的記錄會被替換mobile_no,但因爲它們已經被contact_no排序,他們就會出現在搜索底部結果。

我怎樣才能將二者結合起來的結果(如果primary_contact不存在,並且進行搜索的結合紀錄)

有沒有其他解決問題的辦法,我可以結合該行的搜索記錄或類似的東西?

P.S.我已經使用將分頁

+0

看看http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce如果使用MySQL並嘗試類似':order =>「COALESCE(primary_contact_no, mobile_no)' – rubish

+0

我使用postgresql .. rails 2 –

+0

你應該開始使用'Contacts.all(:order =>「...」)''而不是'Contacts.find(:all,:order =>「...」)'如果您計劃升級到rails 3一段時間 – jigfox

回答

1

您可以訂購一次從數據庫中檢索它們。

所以

contacts = Contact.all 
u.sort!{|a,b| a.con_number<=> b.con_number} 

然後在你接觸模型

def con_number 
    primary_contact_no||mobile_no 
end 
1

MySQL和PostgreSQL都有COALESCE功能,所以你可以這樣做:

Contacts.find(:all, :order => "COALESCE(primary_contact_no,mobile_no)") 

對記錄進行排序如你所願。但要小心,使用sql函數和原始sql有它的警告。如果您決定切換數據庫,則必須檢查您的新RDBMSI是否支持您使用的每個原始SQL和SQL函數。

我不會在我的應用程序中對記錄進行排序,因爲這意味着我無法使用意願分頁的分頁來選擇有限的數據,並且必須檢索整套記錄,對它們進行排序,然後使用基於分頁的相關記錄參數。隨着聯繫人表格的增長,它將持續增加響應時間。