Hi Niphlod,
        This is amazing - The below code did the trick. I am thrilled
with these settings. I need to go back and do my homework right (study
the web2py book with new features) - Also need to learn new database
skills, I agree with you completely that leaving joins to db or rather
the stuff that db can handle to db will always be more efficient.

lfu = db((db.friends.reguserid == session.logged_in_user_id) &
(db.friends.status == 'Friend'))._select(db.friends.friendid)  # mind
the ._SELECT instead of .SELECT

friendupdates = db((db.updates.reguserid.belongs(lfu) ) &
(db.updates.updated_on==now)).select()

return dict(list_friend_updates_list=friendupdates)

Thanks Rahul (www.flockbird.com)  - Build Connect beta

=====================

On Feb 6, 6:06 pm, Niphlod <niph...@gmail.com> wrote:
> well...
>
> for row in lfu:
>     list_friend_updates= getfriend(row.friendid)
>     print list_friend_updates
> return dict(list_friend_updates=list_friend_updates)
>
> prints all, but reassign for every loop to list_friend_updates ONLY
> the getfriend(row.friendid).
>
> You are not seeing the first record when returning the dict, but the
> last one of the loop.
>
> You need to store every result for all the records in the loop in a
> list, for example
>
> list_friend_updates_list = []
> for row in lfu:
>     list_friend_updates= getfriend(row.friendid)
>     list_friend_updates_list.append(list_friend_updates)
>
> return dict(list_friend_updates_list=list_friend_updates_list)
>
> PS: sure that this can't be retrieved by joining tables instead of
> retrieve recursively ?
>
> you are doing
>
> friendupdates = db((db.updates.reguserid == friendid ) &
> (db.updates.updated_on==now)).select()
>
> for every friendid passed by the first query
>
> lfu = db((db.friends.reguserid == session.logged_in_user_id) &
> (db.friends.status == 'Friend')).select(db.friends.friendid)
>
> that can be accomplished by
>
> lfu = db((db.friends.reguserid == session.logged_in_user_id) &
> (db.friends.status == 'Friend'))._select(db.friends.friendid)  # mind
> the ._SELECT instead of .SELECT
>
> friendupdates = db((db.updates.reguserid.belongs(lfu) ) &
> (db.updates.updated_on==now)).select()
>
> !!!
>
> Leaving joins to db is more efficient than doing in a recursive loop
> in python!
>
> On 6 Feb, 13:28, Rahul <rahul.dhak...@gmail.com> wrote:
>
>
>
>
>
>
>
> > Hi All,
> >      I am using web2py 1.99.4 on Win7. I have this part of code that I
> > want to serialize to a view but conditionally. I am trying to retrieve
> > id's from one table and pass the id's to get data from another table.
> > Although I am able to make it work from within the loop but from
> > outside of the loop with "list_friend_updates=list_friend_updates", it
> > does not work fine. It only shows me the first entry and ignores the
> > rest. I think that could be a python programming problem of mine, can
> > any one suggest a solution?
> > I want that "list_friend_updates" should get all the rows I want to
> > iterate over. I've checked other functions and they are returning
> > proper values.
>
> > Here is the code  from my controller -----
> > def home():
> > list_friend_updates=""  #Dummy value declared to stop it showing any
> > issue
>
> >  #Get Friends ids first
> > lfu = db((db.friends.reguserid == session.logged_in_user_id) &
> > (db.friends.status == 'Friend')).select(db.friends.friendid)
>
> >  #pass the selected friendid recursively (using a for loop) and get
> > their updates...
>
> > for row in lfu:
> >       #Call getfriend (see below) function below and iterate over each
> > id found, getfriend function returns values
> >         list_friend_updates= getfriend(row.friendid)
> >         print list_friend_updates #This shows all friends records and
> > works but fails if I use it in return below
>
> > return dict(form=form , list_friend_updates=list_friend_updates, )
>
> > ##### Get Friend Function - Get the friend id values from above
> > function and iterate over each to get data #####
> > def getfriend(friendid):
> >       friendupdates = db((db.updates.reguserid == friendid ) &
> > (db.updates.updated_on==now)).select()
>
> >     return friendupdates
> > ------------------------------------
> > What am I doing wrong? Please suggest.
>
> > Thanks,
> > Rahul D (www.flockbird.com) - Build Connect beta

Reply via email to