Instead passing your tag, pass an inverse tag selection where you omit you tag, then use not belongs : ~link.tag_id.belongs(subquery)...
Where subquery will something like that : subquery=db(~db.TAGTABLE.TAGNAME.belongs((tag1,tag2,tagEtc))).select( db.TAGTABLE.TAGNAME.id) Richard On Sat, Sep 29, 2012 at 1:51 PM, andrej burja <andrej.bu...@gmail.com>wrote: > hi > > another question: > there is number of tags: n = len(tags) > and there is > rows = db(data.id==link.record_id)\ > (link.tag_id.belongs(subquery)).select( > data.ALL, > orderby=data.id, > groupby=data.id, > having=data.id.count()==n) > > so, if i have data1 with tags (news, sport) and data2 with tags (news, > sport, football) > and searching for tags: news, sport > > is the result data1 only or data1 and data2 > if later, how to search for data with exactly entered tags (omit data with > more tags) > > andrej > > > On Monday, September 24, 2012 5:57:35 PM UTC+2, andrej burja wrote: >> >> hi >> >> it works >> thank you >> >> andrej >> >> On Sunday, September 23, 2012 12:18:32 AM UTC+2, Massimo Di Pierro wrote: >>> >>> Looks like postgres is picky and wants in groupby all the selected >>> fields in distinct. This should work: >>> >>> rows = db(data.id==tag.record_**id)\ >>> (tag.name.belongs(tags)).sel**ect( >>> data.ALL, >>> orderby=data.id, >>> groupby=data.id|data.value, >>> distinct=True) >>> >>> On Saturday, 22 September 2012 15:00:07 UTC-5, andrej burja wrote: >>>> >>>> the code with problem: >>>> >>>> rows = db(data.id==tag.record_id)\ >>>> (tag.name.belongs(tags)).selec**t( >>>> data.ALL, >>>> orderby=data.id, >>>> groupby=data.id, >>>> distinct=True) >>>> >>>> >>>> >>>> On Saturday, September 22, 2012 10:26:27 AM UTC+2, andrej burja wrote: >>>>> >>>>> hi >>>>> >>>>> i would like to use idea in book Application Development Cookbook - >>>>> Efficienty search by tag. >>>>> there are two functions: 'search_or' and 'search_and' >>>>> everything is working fine on sqlite >>>>> when i switch to postgres, there seems to be problem with 'groupby'. >>>>> i got an error >>>>> >>>>> <class 'psycopg2.ProgrammingError'> column "data.value" must appear in >>>>> the GROUP BY clause or be used in an aggregate function LINE 1: SELECT >>>>> DISTINCT data.id, data.value FROM tag, data WHERE ((d... ^ >>>>> when i remove 'groupby=....id" there is no error, but (of course) >>>>> 'search_and' function doesn't work properly >>>>> >>>>> is this a bug related to postgres? >>>>> >>>>> andrej >>>>> >>>> -- > > > > --