私の画像ラベル付けアプリでは、画像に割り当てられたラベルのリストを、このラベルを割り当てたラベルタイプとユーザー情報とともに表示したいと考えています。メイン テーブルは 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で2つの「JOINS」とともにWHEREを使用する方法がわかりません:-(
助けてくれてありがとう!
編集:解決策アンソニーからの回答を読んだ後:
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
)