我正在开发一个产品评论网站。我正在努力展示与该产品相关的所有评论。
我真正想要的是一个WHERE子句,它允许我说出products.id = reviews.prodId ...并显示所有结果,但是从我所看到的是这样做的方法。
进行审核时,会输入产品ID。评论存储在评论数据库中,该数据库对产品数据库有参考价值,但我不确定它是否正确:
db.define_table('reviews',
Field('id',requires=IS_NOT_EMPTY()), #auto number
Field('prodId',db.products.id,requires=IS_NOT_EMPTY()), #referenced id
Field('title',requires=IS_NOT_EMPTY()), # title of the review
Field('body', 'text',requires=IS_NOT_EMPTY()), # review
Field('time_stamp','datetime'), # timestamp w/date
primarykey=['id'],
migrate=False)
default.py:
def show():
reviews = db.reviews(request.args(0))
products = db.products(request.args(0))
return locals()
show.html
{{extend 'layout.html'}}
{{for row in db(db.reviews.prodId == 1).select():}}
<h2>
{{=reviews.title}} for {{=products.name}}
</h2>
<i>Posted on {{=reviews.time_stamp}} by (persons name)</i>
<p>
<b>
{{=reviews.body}}
</b>
</p>
{{pass}}
谢谢,杰里米。
答案 0 :(得分:0)
使用recursive select,您可以:
def show():
product = db.products(request.args(0))
reviews = product.reviews.select()
return locals()
以上,product.reviews.select()
相当于db(db.reviews.prodId == product.id).select()
。
在视图中,您将拥有:
{{for review in reviews:}}
<h2>{{=review.title}} for {{=product.name}}</h2>
<i>Posted on {{=review.time_stamp}} by (persons name)</i>
<p>
<b>
{{=review.body}}
</b>
</p>
{{pass}}
另一种选择是join:
def show():
rows = db((db.products.id == request.args(0)) &
(db.reviews.prodId == db.products.id)).select()
return locals()
然后在视图中:
{{for row in rows:}}
<h2>{{=row.reviews.title}} for {{=row.products.name}}</h2>
<i>Posted on {{=row.reviews.time_stamp}} by (persons name)</i>
<p>
<b>
{{=row.reviews.body}}
</b>
</p>
{{pass}}