2012-08-22 60 views
1

我有以下代碼(?):導軌在SQL - 刪除自動分揀

@selected_authors = Author.find(:all, :conditions => ["AUT_OID in (?)",@selected_authors_array ]) 

@selected_authors_array是作者的數組ids例如:55 75 74

注陣列中的ID是不以特定順序

當我

<%@selected_authors.each do |author| %> 
<%=author.AUT_OID %> -- <%=author.AUT_NAME %> 
<% end %> 

它顯示55,74,75(它改變了順序按照升序排列)

我想保留@selected_author中的條目順序,因爲它在數組'@selected_authors_array'中。

任何幫助最受讚賞

回答

2

這是一個底層數據庫的問題。

如果您對AUT_OID列進行搜索/比較,它將自動使用此索引(如果可用)或主要的索引來檢查所有條目。 如果比較結果返回「true」,數據庫將只彈出當前行到結果列表。 因此,如果您有一個AUT_OID上的索引/主文件並對其進行搜索,那麼您將獲得AUT_OID排序的列表。

我認爲如果你真的需要相同的ID順序,你需要手動使用它。

蒂普:在MySQL上您可以看到指數(因而順序)DB通過使用EXPLAIN語法使用:

EXPLAIN <select-statement> 
+0

感謝您的解釋,我沒有意識到這是數據庫的問題 – Kim

2

這是SQL服務器的行爲。

它從第一條記錄開始搜索記錄。哪個記錄會首先添加到輸出中。

1. So in your database table records are in this order 55 74 75 
2. And your using IN, IN will check value is there or not. 

您可以手動安排。