January 23rd, 2012, 02:47 PM
One to many query for 3 tables
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. 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:
or, in raw sql:
@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)
Any help would be greatly appreciated!
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
January 25th, 2012, 07:38 AM
found the solution:
@properties = Property.paginate(age => params[age], er_page => 20).includes(hotos).includes(:layouts).order("properties.modify_date, layouts.modify_date").all