Grouping data for charting

Hi there, I'm using Open Flash Chart to create a pie chart of user's categorized spending. It currently includes only categories that I have in my Category model, but does not include "uncategorized" entries which have no association in the entry_categories table.

I'd like to include those entries that are not categorized as well in my grouping so that I can display them in the pie chart as "uncategorized." How would i do that? Below is the SQL that successfully grabs categorized entries. How would i retrieve and group uncategorized entries as part of this query?

@entries = Entry.find_by_sql ["SELECT sum(entries.price) AS sum_price, categories.name AS category_name, categories.color AS category_color       FROM entries, categories, entry_categories       WHERE entries.user_id = ? AND entries.id = entry_categories.entry_id and entry_categories.category_id = categories.id       GROUP BY categories.id", current_user.id]

Thanks in advance. -A

How about supplementing what you're already getting back w/a call like this:

@entries << Entry.find_by_sql('select sum(entries.price) as sum_price, "uncategorized" as category_name from entries where id not in (select entry_id from entry_categories)')

HTH,

-Roy

Great suggestion Roy, thanks! I even added category_color for uncategorized entries in the SQL query you built. Take a look at the output though...

[#<Entry >, #<Entry >, #<Entry >, #<Entry >, [#<Entry >]]

The 5th entry here is the "uncategorized" entry. It's in brackets which is tripping up Open Flash Chart. How do i remove that extra set of brackets?

-A

It's a bit ugly, but here's what i did:

@entries = Entry.find_by_sql ["SELECT sum(entries.price) AS sum_price, categories.name AS category_name, categories.color AS category_color       FROM entries, categories, entry_categories       WHERE entries.user_id = ? AND entries.id = entry_categories.entry_id and entry_categories.category_id = categories.id       GROUP BY categories.id", current_user.id]

uncategorized = Entry.find_by_sql('select sum(entries.price) as sum_price, "uncategorized" as category_name, "#CCCCCC" as category_color from entries where id not in (select entry_id from entry_categories)')

for uncat_entry in uncategorized    @entries << uncat_entry end

Thanks again for your help. If you have another suggestion, let me know!

-A

Ah, right.

Well, that SQL will only ever return a single row, so you should be able to reference the single element contained therein, like so:

@entries << Entry.find_by_sql('select sum(entries.price) as sum_price, "uncategorized" as category_name from entries where id not in (select entry_id from entry_categories)')[0]

HTH,

-Roy