sorry, I didn't understood what you model was.

So, let's say you have
products table:

id name
1  "foo"
2  "bar"

and filters table:

id name
1  "top"
2  "sweatshirt"
3  "hoodie"

and a product_filter table

id product_id filter_id
1  1          1
2  1          2
3  2          3

so, basically, when you "de-normalize" it, it would be 
"foo" is "top", "sweatshirt"
and
"bar" is "hoodie"
.

you want to find all products that have the "filter" equal to "top".
ok.

#all filters matching "hoodie"
myfilter = db(db.filters.name == "hoodie")
#all product_filters matching the previous id(s)
myfiltered_products = 
db(db.product_filter.filter_id.belongs(myfilter._select(db.filters.id)))
#all products matching product_filter id(s)
top_products = 
db(db.products.id.belongs(myfiltered_products._select(db.product_filter.product_id)))
print top_products.select()

However, it's a little bit cumbersome to this syntax, although its 
perfectly working.

Another way can be

#linkage between the 3 tables
all_in_one = db(
        (db.products.id == db.product_filter.product_id) &
        (db.filters.id == db.product_filter.filter_id) 
    )
    
all_in_one_hoodies = all_in_one(db.filters.name == "hoodie").select()
#optionally, you can just select(db.products.ALL)
all_in_one_tops = all_in_one(db.filters.name == "top").select()
all_in_one_sweatshirts = all_in_one(db.filters.name == "sweatshirt").select
()
    
print 'hoodies', all_in_one_hoodies
print 'tops', all_in_one_tops
print 'sweatshirts', all_in_one_sweatshirts


Sorry for the misunderstanding .... I hope it's a bit clearer now.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to