你找两个查询:
计数一个地方是多少次救一般 - 我想这是加入与SavedPlaces地方,由地方ID将它们分组和计数多少SavedPlaces ID为每每组
select places.place_id, places.place_name, Count(*)
from places
inner join savedplaces on savedplaces.place_id = places.place_id
group by places.place_id, places.place_name
如果有可能的访问者留有一个地方的两倍(这是否感觉在你的应用程序?),和要一次算这样的重复,然后用Count(distinct savedplaces.visitor_id)
代替Count(*)
。
对于其他要求:
看到如果访问者保存一个地方 - 我想这为具有每一个地方游客ID列表。
select places.place_id, places.place_name, visitors.visitor_id, visitors.visitor_name
from places
inner join savedplaces on savedplaces.place_id = places.place_id
inner join visitors on visitors.visitor_id = savedplaces.visitor_id
要知道保存在特定地点的游客,加where
条款:
where places.place_id = ?
...其中?
代表你想获得游客的任何place_id。
同样,要知道一个特定访问者储存的位置,使用where
条款:
where places.visitor_id = ?
...其中?
代表你想要得到保存的地方无论visitor_id。
如果要列出所有的地方,和特定访问者是否已经救了它的指示(是/否),那么你可以使用外(left
)加入:
select places.place_id, places.place_name,
case when savedplaces.visitor_id is null then 'No' else 'Yes' end
from places
left join savedplaces on savedplaces.place_id = places.place_id
on savedplaces.visitor_id = ?
同样,如果要列出所有访问者,以及他们是否保存在特定地点的指示(是/否),那么你可以使用外(left
)加入,以及:
select visitors.visitor_id, visitors.visitor_name,
case when savedplaces.place_id is null then 'No' else 'Yes' end
from visitors
left join savedplaces on savedplaces.visitor_id = visitors.visitor_id
on savedplaces.place_id = ?
你有问题吗? – aquinas
你尝试了什么? –
你想写的查询得到1)每个地方和它已经保存了多少次2)访问过一个特定地点的访问者列表? –