On Mon, Jan 23, 2012 at 8:39 PM, Clem Rock <[email protected]> wrote:
> Hello, > I am looking for a join query between 3 tables that will give me the > results I'm looking for. > > I have a properties tables that has many layouts and many photos as > well. The layouts table can also, have many layouts. Is this a correct statement or a typo? "The layouts table can also, have many layouts." > When I run the > query, I want to show a list of properties w/ one main photo from the > photos table, and a list of layouts per property. Right now, the query > I have will show a list of properties, but properties will be displayed > multiple times if there are more than one photos. Here's my current > query in rails form: > > [code] > @properties = Property.paginate(:page => params[:page], > :select => ["properties.*, > layouts.*, photos.*"], > :joins => ["INNER JOIN layouts > ON layouts.property_id = properties.property_id LEFT JOIN photos ON > photos.property_id = properties.property_id"], > :per_page => 20) > [/code] > > or, in raw sql: > > [code] > SELECT properties.*, layouts.*, photos.photo_file_name FROM `properties` > INNER JOIN layouts ON layouts.property_id = properties.property_id LEFT > JOIN photos ON photos.property_id = properties.property_id WHERE > (properties.property_status='available') ORDER BY layouts.rent LIMIT 20 > OFFSET 0 > [/code] > Which paginator are you using? Which version of Rails? Taking abstraction of the effect the paginator may have ... Look in http://guides.rubyonrails.org/active_record_querying.html Start with the simplest cases in `rails console` and build up your query. Probably a style of @properties = Property.includes(:photos). includes(:layouts). where("properties.property_status='available'"). order("layouts.rent"). all will get you close (or maybe .joins(layouts) if you really need the INNER JOIN on layouts). Try a solution where you do _not_ set the select manually first. By the design of SQL querying language, the raw SQL will always return the property for each photo (if it is all executed in 1 SQL query). But Activerecord will consolidate the different returned records in 1 record in the @properties list (which then will :have_many photos). HTH, Peter -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

