jackliddlephysics-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org
2008-Oct-20 17:40 UTC
A little help cleaning up SQL query.
I have the SQL a for my query, its a little messy with several joins. Could someone please help/suggest how to turn this into a nice activerecord query (if possible) so I a) don''t have this sql knocking around in my app breaking when I change database systems and b) use it a named scope. The query is "SELECT a.*, b.total_losses FROM (SELECT items.*, COUNT(votes.id) total_wins FROM items LEFT JOIN votes ON items.id = votes.winner_id GROUP BY items.id ) a JOIN (SELECT items.id, COUNT(votes.id) total_losses FROM items LEFT JOIN votes ON items.id = votes.loser_id GROUP BY items.id ) b ON a.id=b.id order by a.total_wins/b.total_losses DESC;" my models look like (in case the info helps) class Item < ActiveRecord::Base has_many :winners, :class_name => "Vote" ,:foreign_key => "winner_id" has_many :losers , :class_name => "Vote" ,:foreign_key => "loser_id" end class Vote < ActiveRecord::Base belongs_to :winner, :class_name => "Item" belongs_to :loser, :class_name => "Item" end and the tables look like: mysql> desc items; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+ mysql> desc votes; +------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | winner_id | int(11) | YES | | NULL | | | loser_id | int(11) | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +------------+----------+------+-----+---------+----------------+ Thanks very much for any help that can be offered. Jack --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---