You can also to
db=DAL()db.define_table('a',Field('name'))
db.define_table('b',Field('name'))
db.a.insert(name='Alex')
db.a.insert(name='Max')
db.a.insert(name='Tim')
db.b.insert(name='John')
db.b.insert(name='Jack')
def union(x,y):
y.colnames=x.colnames
return x|y
*rows = union(db().select(db.a.name),db().select(db.b.name)).sort(lambda
row: row.name)*
for row in rows: print row.name
This does not translate into a union and runs at the web2py level. Mind
that while testing I notice a discrepancy between docs and implementation
of the sort() method. I fixed it in trunk. This code will only work with
trunk.
Massimo
On Friday, 20 July 2012 16:08:16 UTC-5, Cliff Kachinske wrote:
>
> You can avoid a union like so:
>
> rows = db(q).select(r).as_list()
> rows.extend(db(qq).select(rr).as_list()
>
>
>
> You have to access attributes dictionary fashion, not in dot notation.
> Could be a problem for SQLTABLE and descendants.
>
> Google 'sort list of dictionaries' to see how to sort it.
>
> On Friday, July 20, 2012 3:00:58 PM UTC-4, Andrew wrote:
>>
>> Does that mean sample, example, random have to have identical structures ?
>> What if I just want the id and name columns ? How do I select just those
>> in a union scenario?
>>
>> I know massimo doesn't like unions, but they are required sometimes. I
>> am visualizing object relationships in a graph (picture something like
>> http://bost.ocks.org/mike/fisheye ) and I want to get one list of nodes.
>> I've only done it with executesql so far.
>>
>
--