Help with search query

ok, here’s my dilemna…i have a site that has a list of item
combinations (aka compounds) for a computer game.

i’m having a hard time coming up with a good way to search a compounds
result and the items that are contained within the compound.

the formulas are setup like:

COMPOUND = COMPOUND_MATERIAL + COMPOUND_MATERIAL…(compound has up to 5
compound_materials)

to get a better idea of what i mean check this page from the site

my table setup is:

ITEMS (which can be a compound result or compound component)
-ID
-name
-description
-…

COMPOUNDS (has_many compound_materials)
-ID
-item_id
-…

COMPOUND_MATERIALS (belongs_to item, compound
-ID
-item_id
-compound_id

i guess my first question would be what is the best way that i can
search on ITEM table values like names with the least amount of queries.

i thought about doing joins from compound and compound_materials to
items but i’m sure if it’s possible joining to the same table twice.

at the moment i am doing it this way:

@compounds = Compound.search(…)

@compound_materials = CompoundMaterial.search(…)

  for compound_material in @compound_materials
    compound = Compound.find(:all, :conditions => [ "compounds.id =

?", compound_material.compound_id])
@compounds += compound if not compound.blank?
end

  @compounds.uniq!

  @compounds.sort! {...}

pretty ugly huh?

hope someone can help since i have been trying to come up with a
solution for a few hours now.