Рассмотрим следующую структуру базы данных:Создать псевдоним, ссылающихся на части таблицы
from gluon import DAL, Field
db = DAL('sqlite:memory:')
db.define_table('party',
Field('place')
)
db.define_table('participant',
Field('party_id', 'reference party'),
Field('name'),
Field('role')
)
db.party.insert(place="Jane's home")
db.participant.insert(name='Jane',party_id=1,role='host')
db.participant.insert(name='George',party_id=1,role='organizer')
db.participant.insert(name='John',party_id=1,role='guest')
db.participant.insert(name='Mary',party_id=1,role='guest')
Сейчас. Я хотел бы сделать выбор, когда я выбираю каждую вечеринку с ее хостом и организатором.
я могу сделать это так:
host = db.participant.with_alias('host')
organizer = db.participant.with_alias('organizer')
rows = db().select(
db.party.place,
host.name,
organizer.name,
left=(
host.on((host.party_id==db.party.id) & (host.role=='host')),
organizer.on((organizer.party_id==db.party.id) & (organizer.role=='organizer'))
)
)
for row in rows:
print [row.party.place, row.host.name, row.organizer.name]
Но я думаю, что это не самый лучший способ. В частности, это предложение:
& (host.role=='host')
Звучит довольно нелепо. Кроме того, возможно, в следующий раз мне придется выбирать все хосты. Тогда я должен включать в себя вышеупомянутое условие всюду.
Есть ли способ определить псевдоним хоста, чтобы я мог получить только тех, кто является хозяевами?
Я ищу какое-то решение, как:
create view host as select * from participant where role = 'host'
также любые другие идеи, чтобы сделать последний выбор похорошела приветствуются!
Кто-нибудь? Имеет ли мой вопрос смысл? – Pekka