I tried db(query).select(limitby = (0, number_of_records), orderby = 
'<random>', distinct = db.t_article['f_book_id']). It produces the error 
message:

<class 'psycopg2.ProgrammingError'> SELECT DISTINCT ON expressions must 
match initial ORDER BY expressions LINE 1: SELECT DISTINCT ON 
(t_article.f_book_id) t_book_i... ^ 
groupby produces a comparable error message. I take it that it wants the 
t_article.f_book_id field passed to orderby, but I'd like to have orderby = 
"<random>". Any ideas on how to resolve this?



On Wednesday, January 21, 2015 at 3:08:14 PM UTC-5, Niphlod wrote:
>
> seems like a job for distinct=True (or a groupby) . Docs are here 
> <http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#orderby--groupby--limitby--distinct--having-orderby_on_limitby-left-cache>
>
> On Wednesday, January 21, 2015 at 7:09:41 PM UTC+1, Spokes wrote:
>>
>> I'd like a db(query).select(...) operation to return a set of rows in 
>> which there can only be one instance of a row with a particular value for a 
>> certain field. My query is like this:
>>
>>         book_query = ((db.t_article.f_book_id != None) & 
>> (db.t_article.f_book_id == db.t_book_image.id))
>>         article_image_query = (db.t_article_image.f_article_id == 
>> db.t_article.id)
>>         query = [stuff pertaining to t_article] & (article_image_query | 
>> book_query)
>>         
>> The idea is to find all t_article entries within a certain time frame 
>> (that's the stuff in brackets, which has been omitted), which either have 
>> an image associated with them, or which reference a t_book entry which has 
>> an image associated with it.
>>
>> The select statement is like this:
>>
>>     rows = db(query).select(limitby = (0, number_of_records), orderby = 
>> '<random>')
>>     
>> I'd like the select statement to return no more than one row with a 
>> particular value for the f_book_id field. With the above select() statement 
>> as it is, it's possible for rows[0]['t_article']['f_book_id'], 
>> rows[1]['t_article']['f_book_id'], and rows[2]['t_article']['f_book_id'], 
>> for example, to have the same value. Is it possible to modify the above 
>> code so that in situations like the preceding, only one of those rows 
>> (doesn't matter which one) is returned, and assigned to the rows object? 
>> Thanks.
>>
>

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to