Rajkumar S
2006-Nov-11 19:16 UTC
Re: linking database when primary key is not id and doing some counting
Hello all, I am adding one more question to my previous posting. I have 2 tables that I had created with migrations, but these are based on existing database. So the automatically created id column is not used. These tables have the following structure. +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | clid | varchar(80) | YES | | NULL | | | src | varchar(80) | YES | | NULL | | | dst | varchar(80) | YES | | NULL | | | start | datetime | YES | | NULL | | | ivr_id | int(11) | YES | MUL | NULL | | | file_name | varchar(255) | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+ and Table clients +-----------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | ivr_id | int(11) | YES | MUL | NULL | | | is_online | char(1) | YES | | NULL | | +-----------+---------+------+-----+---------+----------------+ The ivr_id in calls table is the foreign key referring to ivr_id in clients table. I have my models defined as: class Call < ActiveRecord::Base belongs_to :client, :foreign_key => "ivr_id" class Client < ActiveRecord::Base has_one :call, :foreign_key => "ivr_id" now I want to find out the count of all online clients, which means all calls which have is_online = ''Y'' in the clients table with corresponding ivr_id. I did kind of solved this by the following method. def self.total_calls_online (from_time, to_time) find_by_sql (["SELECT count(*) AS count_all FROM calls,clients WHERE (calls.start > :from_time and calls.start <= :to_time and calls.file_name like ''%wav'' and calls.ivr_id = clients.ivr_id and clients.is_online = ''Y'')", {:from_time => from_time, :to_time => to_time}]) end Now this to me seems not the rails way of ding things. My another query in the model is def self.total_calls (from_time, to_time) count(:conditions => [ "start > :from_time and start <= :to_time and file_name like ''%wav''$ {:from_time => from_time, :to_time => to_time} ]) end here I am just using the count method to get the total count of rows. I would like to rewrite the previous method also to use count, from the find_by_sql I did look a lot to find out how to do this, but could not, and finally settled with find_by_sql Thanks a lot in advance for your help, raj --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---