Thanks, Massimiliano. I was also considering an approach involving creating a list of IDs from the 'thing' table, but I'm not sure that this would be feasible in this case. They may be tens, possibly hundreds of IDs corresponding to the given criteria, and the grid based on these queries is part of the site's front page (i.e. it will be generated very often), so I'm not sure that this approach is necessarily efficient enough. I can't help thinking that there's a more straightforward and efficient way to accomplish this task.
On Saturday, May 9, 2015 at 8:14:51 AM UTC-5, Massimiliano wrote: > > Maybe something like that? > > db.define_table('person', Field('first_name'), Field('last_name'), > format='%(first_name)s') > db.define_table('thing', Field('name'), > Field('owner_id', 'reference person'), > format='%(name)s') > > t = db.thing > p = db.person > > fields = [p.first_name, p.last_name] > > q = ((t.owner_id == p.id) & (t.name == 'chair')) > ids_people_with_chair = [a.id for a in db(q).select(p.id)] > > query = (t.owner_id == p.id) > query = query & (t.owner_id.belongs(ids_people_with_chair)) > query = query & (t.name == 'table') > > print db(query).select(*fields, distinct=True, orderby=p.first_name) > > > > On Fri, May 8, 2015 at 10:49 PM, Spokes <spoke...@gmail.com <javascript:>> > wrote: > >> Hi, Dave. Yes, that seems to be an accurate summary of what I was >> attempting to do. >> >> >> >> On Friday, May 8, 2015 at 3:25:24 PM UTC-5, Dave S wrote: >>> >>> >>> >>> On Friday, May 8, 2015 at 11:55:13 AM UTC-7, Spokes wrote: >>>> >>>> I'd like to create a grid based on criteria relating to a primary >>>> table, and a table that references that primary table. Slightly modifying >>>> the example from the web2py docs, let's say the primary table is >>>> 't_person', and it's referenced by the table, 't_thing'. I'd like the grid >>>> to list 't_person' entries that are referenced by a 't_thing' entry with a >>>> value 'table' for the 'name' field, and by a 't_thing' entry with value >>>> 'chair' for the name field (that is, entries that meet both criteria, not >>>> one or the other). >>>> >>>> >>> Let's see if I understand this. You want to use the set A of t_things >>> that have value 'table' and the set B of t_things that have value 'chair' >>> and find those members of t_person that are referenced by both sets? Sort >>> of "for a in A where a.owner_id == b.owner_id for b in B, select p from >>> t_person where p.id == a.owner_id ? >>> >>> /dps >>> >>> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> 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+un...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Massimiliano > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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/d/optout.