Hi Massimo,
thanks for taking time to have a look to my problem.
Regarding the first suggestion, what I was trying to do was exactly what
you corrected.
The query itself doesn't work as I would: in plain english, I would like to
have a complete list of users that live in a specific city AND know a
specific language.
By doing what you suggested I get doubles row (as the search was done
separately and independently on the two tables and the results then
presented together), eg. I get user1 because it lives in London and I get
user1 because he speaks Italian, but I get also user2 because it leaves in
London BUT only one because it doesn't speak italian. It is what I should
expect?
Thanks
Riccardo
On Friday, 27 June 2014 06:53:57 UTC+1, Massimo Di Pierro wrote:
>
> This is very wrong:
>
> q1 = eval('db. userLanguage.'+ language )== True
>
> what is it supposed to be?
>
>
> q1 = db.userLanguage[language] == True
>
> I am not sure. Once q1 is correct, this works:
>
> results = db(q1 & q2).select()
>
> On Wednesday, 25 June 2014 17:04:28 UTC-5, Riccardo C wrote:
>>
>> Dear all,
>>
>> I am trying to formulate a query to get ALL the people that know a
>> language AND leave in a specific city.
>> As I am not an expert I thought that was a good idea to have two tables
>> as following:
>> auth.settings.extra_fields['auth_user']= [
>> Field('city',requires=IS_IN_SET(('UK - London','IT - Milano','USA - New
>> York')) )]
>>
>>
>> db.define_table('userLanguage',
>> Field('idUser','reference auth_user', unique=True),
>> Field('French','boolean',default = False),
>> Field('Italian','boolean',default = False),
>> Field('Chinese','boolean',default = False),
>> Field('Indian','boolean',default = False))
>>
>> in term of controller search function I decided to get the information
>> from the URL (that in my idea will be generate from a javascript function
>> depending of what the user select on the page):
>> def search():
>>
>> lstLanguages = ['French', 'Italian', 'Chinese', 'Indian']
>>
>> lstCity = ['UK - London','IT - Milano','USA - New York']
>>
>> language = lstLanguages[int(request.vars.n)]
>> userCity = lstCity[int(request.vars.c)]
>>
>> q1 = eval('db. userLanguage.'+ language )== True
>> q2 = db.auth_user.city == userCity
>>
>> """ QUERY: give me the list of users that know that language and live
>> in that city"""
>>
>>
>> return dict(form = chefResults)
>>
>> As written above I tried different way to do that (without succed):
>>
>> results = db(q1 & q2).select() """ gives me, as expected the sum of the
>> two query results"""
>> -------------------------------
>> results2 = db(q1).select() '''this return those who speak the selected
>> language'''
>> searchresults = [row for row in results2 if results2.idUser_city ==
>> userCity] '''this make web2py to crash! I have to kill the process...why?'''
>>
>> I hope to not have bother you too much, I would like to learn and
>> understand... in particular:
>> 1) which is the best way of doing this kind of query?
>> 2) is there a better way of structuring the data (db tables)
>> 3).... why it crashes?!
>> 4) what would be the best way to pass the search criteria to the
>> function?
>>
>> Thanks for any answer and I hope it might be useful for other people as
>> well.
>>
>> Regards,
>>
>> Riccardo
>>
>>
>>
>>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.