1

我有以下代码:

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

@selected_authors_array 是作者 ID 的数组,例如:55 75 74

请注意,数组中的 id 不是按特定顺序排列的

当我做

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

它显示 55、74、75(它将 id 的顺序更改为升序)

我想保持@selected_author 中条目的顺序,因为它在数组'@selected_authors_array' 中。

非常感谢任何帮助

4

2 回答 2

2

这是底层数据库的问题。

如果您对 AUT_OID 列进行搜索/比较,它将自动使用此索引(如果可用)或主要索引来遍历所有条目。如果比较返回“true”,则数据库只会将当前行弹出到结果列表中。因此,如果您在 AUT_OID 上有一个索引/主索引并对其进行搜索,您将获得一个 AUT_OID 有序列表。

如果您确实需要相同的 ID 顺序,我认为您需要手动使用它。

提示:在 mySQL 上,您可以使用 EXPLAIN 语法查看数据库使用的索引(以及顺序):

EXPLAIN <select-statement>
于 2012-08-22T12:52:28.370 回答
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.

您可以手动安排。

于 2012-08-22T13:24:36.830 回答