<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1446,6 +1446,12 @@ module ActiveRecord
           tables_from_conditions = conditions_tables(options)
           tables_from_order      = order_tables(options)
           all_tables             = tables_from_conditions + tables_from_order
+          distinct_join_associations = all_tables.uniq.map{|table|
+            join_dependency.joins_for_table_name(table)
+          }.flatten.compact.uniq
+
+
+
 
           is_distinct = !options[:joins].blank? || include_eager_conditions?(options, tables_from_conditions) || include_eager_order?(options, tables_from_order)
           sql = &quot;SELECT &quot;
@@ -1457,7 +1463,7 @@ module ActiveRecord
           sql &lt;&lt; &quot; FROM #{connection.quote_table_name table_name} &quot;
 
           if is_distinct
-            sql &lt;&lt; join_dependency.join_associations.reject{ |ja| !all_tables.include?(ja.table_name) }.collect(&amp;:association_join).join
+            sql &lt;&lt; distinct_join_associations.collect(&amp;:association_join).join
             add_joins!(sql, options, scope)
           end
 
@@ -1617,6 +1623,23 @@ module ActiveRecord
             end
           end
 
+          def join_for_table_name(table_name)
+            @joins.select{|j|j.aliased_table_name == table_name.gsub(/^\&quot;(.*)\&quot;$/){$1} }.first rescue nil
+          end
+
+          def joins_for_table_name(table_name)
+            join = join_for_table_name(table_name)
+            result = nil
+            if join &amp;&amp; join.is_a?(JoinAssociation)
+              result = [join]
+              if join.parent &amp;&amp; join.parent.is_a?(JoinAssociation)
+                result = joins_for_table_name(join.parent.aliased_table_name) +
+                         result
+              end
+            end
+            result
+          end
+
           protected
             def build(associations, parent = nil)
               parent ||= @joins.last</diff>
      <filename>activerecord/lib/active_record/associations.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,6 +8,7 @@ require 'models/entrant'
 require 'models/developer'
 require 'models/post'
 require 'models/customer'
+require 'models/job'
 
 class FinderTest &lt; ActiveRecord::TestCase
   fixtures :companies, :topics, :entrants, :developers, :developers_projects, :posts, :comments, :accounts, :authors, :customers
@@ -857,6 +858,14 @@ class FinderTest &lt; ActiveRecord::TestCase
       Company.connection.select_rows(&quot;SELECT id, name FROM companies WHERE id IN (1,2,3) ORDER BY id&quot;).map! {|i| i.map! {|j| j.to_s unless j.nil?}}
   end
 
+  def test_find_with_order_on_included_associations_with_construct_finder_sql_for_association_limiting_and_is_distinct
+    assert_equal 2, Post.find(:all,:include=&gt;{:authors=&gt;:author_address},:order=&gt;' author_addresses.id DESC ', :limit=&gt;2).size
+
+    assert_equal 3, Post.find(:all,:include=&gt;{:author=&gt;:author_address,:authors=&gt;:author_address},
+                              :order=&gt;' author_addresses_authors.id DESC ', :limit=&gt;3).size
+  end
+
+
   protected
     def bind(statement, *vars)
       if vars.first.is_a?(Hash)</diff>
      <filename>activerecord/test/cases/finder_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>fbebdb0c091c37b0bc75ab774d187d8bc8795bd2</id>
    </parent>
  </parents>
  <author>
    <name>John Devine</name>
    <email>johnjdevine@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/8ded457b1b31b157d6fe89b553749579e5ac4a27</url>
  <id>8ded457b1b31b157d6fe89b553749579e5ac4a27</id>
  <committed-date>2008-05-06T02:47:10-07:00</committed-date>
  <authored-date>2008-05-03T20:49:18-07:00</authored-date>
  <message>Added logic to associations.rb to make sure select_for_limited_ids

includes joins that are needed to reach tables listed in the :order
or :conditions options if they are not joined directly to the main
active_record table.

Signed-off-by: Michael Koziarski &lt;michael@koziarski.com&gt;
[#109 state:resolved]</message>
  <tree>9c9c4689ad1f9efe952b737bbf45eb9455237901</tree>
  <committer>
    <name>Michael Koziarski</name>
    <email>michael@koziarski.com</email>
  </committer>
</commit>
