I believe that example of counting contains is in the book, so to anyone 
who didn't read the book this is new, however, the example was kind of 
confusing. I remember reading about it on the newsgroup that someone 
couldn't understand what was going on. You give a good example of how to 
rewrite that part of the book.

On Wednesday, July 24, 2013 9:54:18 AM UTC-7, VP wrote:
>
> Maybe this was obvious, but I never thought I could do this kind of 
> queries in DAL.  
>
> Okay, let's say I have 2 tables:
>
> Tags = db.define_table('tag', Field('name'))
> Post = db.define_table('post', Field('title'), Field('tag', 'reference 
> tag'))
>
>
> Now, doing a join is easy using the query *(db.post.tag == db.tag.id)*
>
> But if I have the following 2 tables, where a post might have many tags:
>
> Tags = db.define_table('tag', Field('name'))
> Post = db.define_table('post', Field('title'), Field('tag', 
> 'list:reference tag'))
>
> How do I select tags that occur in posts?  It turns out that this can be 
> done very nice using the query:  *db.post.tag.contains( db.tag.id )*
> *
> *
> I have used "contains", but I had thought that the argument for it must be 
> a constant (e.g. a specific tag such as "news"), not something like 
> db.tag.id.
>
> Nice.
>
> Counting tags occurrence (e.g. if you want to have a tag cloud) turns out 
> to be quite simple:   *db( db.post.tag.contains(db.tag.id) 
> ).select(db.tag.ALL, db.tag.id.count(), groupby=db.tag.name)*
>
> Nice!!
>
>

-- 

--- 
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/groups/opt_out.


Reply via email to