Running Web2py 1.99.7 and using a model based on the wiki in the book
(http://web2py.com/books/default/chapter/29/3#A-wiki).  I want to
report a unique list of comments for a particular webpage, for a
particular tag (I've added a many-to-many tag table).  I use a form to
build a query, which ends up like this:

db_query = "(((((comment.id > 0) AND (webpage.title = 'FAQ')) AND
(comment.page_id = webpage.id)) AND (((comment.id =
comment_tags.comment_id) AND (tag.id = comment_tags.tag_id)) AND
(tag.label = 'Agree'))))"

However, the select gives me an "psycopg2.ProgrammingError: missing
FROM-clause entry" because only one of the required tables has been
included in the SQL FROM clause:

>>>db(db_query)._select(db.comment.body, distinct=True, orderby=db.comment.body)

"SELECT DISTINCT comment.body FROM comment WHERE (((((comment.id > 0)
AND (webpage.title = 'FAQ')) AND (comment.page_id = webpage.id)) AND
(((comment.id = comment_tags.comment_id) AND (tag.id =
comment_tags.tag_id)) AND (tag.label = 'Agree')))) ORDER BY
comment.body;"


I can get rid of the error by including all the tables in the select,
but that gives me duplicates:

>>>db(db_query)._select(db.comment.body, db.comment_tags.id, db.tag.id, 
>>>db.webpage.id, distinct=True, orderby=db.comment.body)

"SELECT DISTINCT comment.body, comment_tags.id, tag.id, webpage.id
FROM comment, comment_tags, tag, webpage WHERE (((((comment.id > 0)
AND (webpage.title = 'FQA')) AND (comment.page_id = webpage.id)) AND
(((comment.id = comment_tags.comment_id) AND (tag.id =
comment_tags.tag_id)) AND (tag.label = 'Agree')))) ORDER BY
comment.body;"

The SQL I want (which seems valid enough) is this:

"SELECT DISTINCT comment.body FROM comment, comment_tags, tag, webpage
WHERE (((((comment.id > 0) AND (webpage.title = 'FAQ')) AND
(comment.page_id = webpage.id)) AND (((comment.id =
comment_tags.comment_id) AND (tag.id = comment_tags.tag_id)) AND
(tag.label = 'Agree')))) ORDER BY comment.body;"

How do I get the DAL to do this? What am I missing here?

Reply via email to