Try this:

def join():
  rows = db(db.one.id==db.many.one).select(db.many.id, db.many.one,
db.many.xx, db.many.yy, db.many.zz, db.one.aa, db.one.bb, db.one.cc)
  tr=[]
  f_many='id one xx yy zz'.split()
  f_one='aa bb cc'.split()
  if len(rows)>0:
    r=rows[0]
    tr.append([r.many[x] for x in f_many])
    tr[0].extend([r.one[x] for x in f_one])
    for k in range(1,len(rows)):
      r=rows[k]
      tr.append([r.many[x] for x in f_many])
      print tr
      if tr[k][1]==tr[k-1][1]: # many.one
        tr[k].extend(['','',''])
      else:
        tr[k].extend([r.one[x] for x in f_one])
  tbl=TABLE(tr)
  return dict(rows=rows, tbl=tbl)


On Dec 12, 3:47 pm, Carlos <[email protected]> wrote:
> Hi rochacbruno,
>
> That's what I thought, I just wanted to confirm it.
>
> Thanks to all !,
>
>    Carlos
>
> On Dec 12, 10:50 am, rochacbruno <[email protected]> wrote:
>
> > Carlos, the only solution I see is using a virtual field, or removing 
> > repeats in Java Scripts.
>
> > Enviado via iPhone
>
> > Em 12/12/2010, às 14:17, Carlos <[email protected]> escreveu:
>
> > > Hi Denes,
>
> > > That's clear to me, my question is not about getting the data (I got
> > > it ok), but instead showing the data in an html table (SQLTABLE) with
> > > unique (no repeated) "one" data, as per my examples above.
>
> > > Maybe I'm not explaining clearly? - sorry :-)
>
> > > Thanks!,
>
> > >   Carlos
>
> > > On Dec 12, 9:41 am, DenesL <[email protected]> wrote:
> > >> Hi Carlos,
>
> > >> inside the select you can specify which fields to bring back, I think
> > >> you want:
>
> > >> rows = db(db.one.id==db.many.one).select(db.many.id, db.many.xx,
> > >> db.many.yy, db.many.zz, db.one.aa, db.one.bb, db.one.cc)
>
> > >> On Dec 12, 9:58 am, Carlos <[email protected]> wrote:
>
> > >>> Hi Massimo,
>
> > >>> What do you mean?, that shows the same result (with repeated 'one'
> > >>> data) in the SQLTABLE, doesn't it?.
>
> > >>> Thanks,
>
> > >>>    Carlos
>
> > >>> On Dec 12, 1:23 am, mdipierro <[email protected]> wrote:
>
> > >>>> You can do, for example:
>
> > >>>> rows =
> > >>>> db(db.one.id==db.many.one).select(db.many.id,db.many.one,db.many.xx,db.many
> > >>>>  .yy,db.many.zz,db.one.aa,db.one.bb,db.one.cc)
>
> > >>>> On Dec 11, 12:27 pm, Carlos <[email protected]> wrote:
>
> > >>>>> Hi,
>
> > >>>>> I need to show a SQLTABLE with joined data but without repeated
> > >>>>> information (like grouping but showing all rows).
>
> > >>>>> Let's say I have the following model:
>
> > >>>>>         db.define_table('one', Field('aa'), Field('bb'), Field('cc'),
> > >>>>> format='%(aa)s')
> > >>>>>         db.define_table('many', Field('one', 'reference one'), 
> > >>>>> Field('xx'),
> > >>>>> Field('yy'), Field('zz'))
>
> > >>>>> And the following function:
>
> > >>>>>         def join():
> > >>>>>             rows = db(db.one.id==db.many.one).select()
> > >>>>>             return dict(rows=rows)
>
> > >>>>> This shows all rows correctly but with repeated data for 'one':
>
> > >>>>> many.id many.one        many.xx many.yy many.zz one.id  one.aa  
> > >>>>> one.bb  one.cc
> > >>>>> 1       a1      a1_x1   a1_y1   a1_z1   2       a1      b1      c1
> > >>>>> 2       a1      a1_x2   a1_y2   a1_z2   2       a1      b1      c1
> > >>>>> 3       a2      a2_x1   a2_y1   a2_z1   3       a2      b2      c2
> > >>>>> 4       a2      a2_x2   a2_y2   a2_z2   3       a2      b2      c2
> > >>>>> 5       a3      a3_x1   a3_y1   a3_z1   4       a3      b3      c3
>
> > >>>>> How can I show this same view (with the same number of rows) but only
> > >>>>> showing the 'one' data once (for the first occurrence) as follows?.
>
> > >>>>> many.id many.one        many.xx many.yy many.zz one.id  one.aa  
> > >>>>> one.bb  one.cc
> > >>>>> 1       a1      a1_x1   a1_y1   a1_z1   2       a1      b1      c1
> > >>>>> 2       a1      a1_x2   a1_y2   a1_z2   2
> > >>>>> 3       a2      a2_x1   a2_y1   a2_z1   3       a2      b2      c2
> > >>>>> 4       a2      a2_x2   a2_y2   a2_z2   3
> > >>>>> 5       a3      a3_x1   a3_y1   a3_z1   4       a3      b3      c3
>
> > >>>>> Note the empty spaces in order to show the 'one' data once only (on
> > >>>>> first occurrence).
>
> > >>>>> Thanks,
>
> > >>>>>    Carlos
>
>

Reply via email to