Rob Biedenharn wrote:
> On Jun 2, 2009, at 10:17 AM, Jeff Schwab wrote:
>> Jay Covington wrote:
>>> Hello,
>>>
>>> I have a table called "Itemlist" and have multiple columns in it  
>>> such as
>>> "item1", "item2", "item3", "item4". These columns often have  
>>> repetitious
>>> data between them and I'm trying to count it. The only working code I
>>> have so far is:
>>>
>>> statcount = Itemlist.count(:all, :condition => {:item1 => "Apple"})
>>>
>>> And this works fine for retrieving the count for "Apple" in all the
>>> :item1 fields, but I need to retrieve the count for "Apple" from the
>>> columns :item2, :item3, and :item4 as well as :item1. Any ideas?  
>>> Thanks!
>> item_ids = 1..4
>> apple_query = item_ids.map {|id| "item#{id} = 'Apple'" }.join(" OR ")
>> apple_count = ItemList.count(:all, :conditions => apple_query)
> 
> 
> Yuck! Can you change the schema? Granted, these names are lame, but  
> I'm guess that you have better information from which to confer better  
> ones:
> 
> ItemList
>    id: integer
>    list: string
> 
> ItemListItem
>    id: integer
>    item_list_id: integer
>    item: string
> 
> (and add an index on item_list_id)
> 
> 
> class ItemList < ActiveRecord::Base
>    has_many :item_list_items
> end
> 
> class ItemListItem < ActiveRecord::Base
>    belongs_to :item_list
> end
> 
> statcount = ItemListItem.count(:conditions => { :item => 'Apple' })

That looks like a fundamentally different operation, counting apples, 
rather than lists that contain apples.  Won't any list containing 
multiple apples be over-counted?


--~--~---------~--~----~------------~-------~--~----~
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@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to