Thanks a lot. This is helpful.

On Fri, Oct 5, 2012 at 12:52 PM, Massimo Di Pierro
<[email protected]> wrote:
> I would do:
>
> rows =
> db(db.teams.experimentid.belongs(db(db.listofexperiments.experimentname=='ug2').select(db.listofexperiments.id))).select(db.teams.teamname)
>
> or with a shorter syntax:
>
> rows =
> db(db.teams.experimentid.belongs(db.listofexperiments.experimentname=='ug2')).select(db.teams.teamname)
>
>
> On Friday, 5 October 2012 11:32:44 UTC-5, curiouslearn wrote:
>>
>> Hello,
>>
>> I want to implement the following SQL query:
>>
>> select teamname from teams where experimentid = (select id from
>> listofexperiments where experimentname = 'ug2');
>>
>>
>> I can think of the following way of doing this:
>>
>> (1) Get the experiment id
>>
>>
>>     exptidquery = db(db.listofexperiments.experimentname == 'ug2')
>>     experimentid = (exptidquery.select())[0].id
>>
>>
>>
>> (2) Get team names and ids corresponding to the experimentid
>>
>>
>>     relevantteams = db(db.teams.experimentid ==
>> experimentid).select(db.teams.teamname)
>>
>>
>>
>> But I suppose the above raw SQL connects to the database only once to do
>> the query.
>> The DAL method above needs to connect to the database twice. Am I
>> understanding this correctly?
>> If so, is there a better way to perform the above raw SQL query using DAL.
>>
>>
>> Thanks for your help. The relevant table definitions are given below.
>>
>>
>>
>> The relevant table definitions are:
>>
>> # Table containing a list of experiments
>> db.define_table('listofexperiments',
>>                 Field('experimentname', 'string', length=40, unique=True),
>>                 format='%(experimentname)s')
>>
>>
>> # Table containing teamnames
>> db.define_table('teams',
>>                 Field('teamname', 'string', length=40, required=True,
>>                        notnull=True),
>>                 Field('passwd', 'password'),
>>                 Field('role', 'string', length=20, required=True,
>>                       default='NA'),
>>                 Field('lastround', 'integer', default=0),
>>                 Field('experimentid', 'reference listofexperiments'),
>>                 format = '%(teamname)s',
>>                 migrate='teams.table')
>>
>>
> --
>
>
>

-- 



Reply via email to