在我的图像标签应用程序中,我想显示分配给图像的标签列表以及分配此标签的标签类型和用户信息。主表是 imageLabel。表 auth_user 和 labelType 包含标签的附加信息。
你能帮我把这个 SQL 语句转换成 web2py:
SELECT labelType.name, imageLabel.labelValue, auth_user.first_name, auth_user.last_name from imageLabel
LEFT JOIN labelType
ON imageLabel.labelId = labelType.id
LEFT JOIN auth_user
ON imageLabel.userId = auth_user.id
WHERE imageLabel.imageId = 581
ORDER BY labelType.name
数据模型是这样的:
db.define_table('labelType',
Field('name','string'),
)
db.define_table('imageLabel',
Field('imageId','string'),
Field('labelId','integer'),
Field('userId','integer'),
Field('labelValue','text'),
)
db.define_table('image',
Field('imageId','string')
)
# + built-in auth tables
我的尝试是:
labels = db((db.imageLabel.id == db.labelType.id) ).select(
db.imageLabel.labelValue, db.labelType.name, db.auth_user.first_name, db.auth_user.last_name, db.imageLabel.labelTimeStamp,
left=db.auth_user.on(db.imageLabel.userId==db.auth_user.id)
)
这显然不起作用,因为代码中没有 WHERE imageLabel.imageId = 581 部分。而且我不知道如何在 web2py 中使用 WHERE 和 2 个“JOINS” :-(
非常感谢您的帮助!
编辑:解决方案阅读安东尼的回答后:
labels = db(
db.imageLabel.imageId == img.id
).select(
db.imageLabel.labelValue,
db.labelType.name,
db.auth_user.first_name,
db.auth_user.last_name,
db.imageLabel.labelTimeStamp,
left=[
db.labelType.on(db.imageLabel.labelId == db.labelType.id),
db.auth_user.on(db.imageLabel.userId==db.auth_user.id)
],
orderby=~db.labelType.name
)