我有两张桌子
单位
id - primary key
title - text
flats_reservations
id - primary key
flat_id - foreign key to Flats(id)
creator_id - foreign key to users(id)
is_reserved - boolean
created_at - current_timestamp
如果flats_reservations有这些行
id=1, flat_id=12, creator_id=5, is_reserved=1, created_at=2016-10-10 00:00:00
id=2, flat_id=12, creator_id=5, is_reserved=0, created_at=2016-10-10 00:00:05
id=3, flat_id=12, creator_id=4, is_reserved=1, created_at=2016-10-10 00:00:10
然后仅 id = 4的用户可以删除预订(例如插入以下行( is_reserved = 0 )
id=4, flat_id=12, creator_id=4, is_reserved=0, created_at=2016-10-10 00:00:10
没有其他用户可以做到这一点。
如何选择目前(例如最新)预订状态的所有单位清单?
简单但不有效的方式 - 适用于每个单位
select is_reserved from flat_reservations where flat_id={id} order by created_at desc limit 1
这也可以通过子查询来完成
select flats.id, flats.title, (select is_reserved from flat_reservations where flat_id=flats.id order by created_at desc limit 1) as is_reserved from flats;
但我怎样才能使这更有效呢?
答案 0 :(得分:1)
这基本上是您的查询:
select f.id, f.title,
(select is_reserved
from flat_reservations fr
where fr.flat_id = f.id
order by fr.created_at desc
limit 1
) as is_reserved
from flats f;
这是做你想做的事情的好方法。如果性能问题,您需要flat_reservations(flat_id, created_at, is_reserved)
上的索引。