ruby on rails -相互访问地点的SQL查询



我正在为我的大学用Rails 3/PostgreSQL做一个项目,在那里我们有用户,活动和场地。用户有许多活动,场地也有许多活动。一个活动属于一个用户和一个场地,因此有一个user_id和一个venue_id。

我需要的是一个SQL查询(甚至是Rails本身的方法?)来找到几个用户之间的共同场所。例如,我有5个用户访问了不同的场所。5个用户只访问了2个场馆。所以我想检索这两个场馆。

我从从5个用户中检索所有活动开始:

SELECT a.user_id as user, a.venue_id as venue
FROM activities AS a
WHERE a.user_id=116 OR a.user_id=227 OR a.user_id=229 OR a.user_id=613 OR a.user_id=879

但现在我需要一种方法来找到共同的场所。任何想法?

谢谢,晚礼服

我不太熟悉postgresql的sql语法,但是试试这个:

select venue_id, COUNT(distinct user_id) from activities Where user_id in (116,227,229,613,879) group by venue_id having COUNT(distinct user_id) = 5

编辑:

您需要将'5'更改为您关心的用户数量(您正在寻找的用户数量)。

我在一个表结构上测试了这个:

<>之前User_id venue_id id----------- ----------- -----------1 1 12 6 23 3 34 4 45 5 51 2 62 2 73 2 84 2 95 2 10之前

输出为:

<>之前venue_id----------- -----------2 5

您必须为您的搜索提出一些参数。例如,5个用户可能有2个共同的场馆,但不是3个。

如果你想看看这五个用户有什么共同之处,你可以这样开始:

SELECT a.venue_id, count(1) as NoOfUsers
FROM activities AS a
WHERE a.user_id=116 OR a.user_id=227 OR a.user_id=229 OR a.user_id=613 OR a.user_id=879
group by a.venue_id

它会告诉你,对于那些用户,有多少用户拥有那个场地。所以你有不同程度的"场地共享"。

但是如果你只想看到这五个用户去过的场馆,你可以在末尾加一行:

SELECT a.venue_id, count(1) as NoOfUsers
FROM activities AS a
WHERE a.user_id=116 OR a.user_id=227 OR a.user_id=229 OR a.user_id=613 OR a.user_id=879
group by a.venue_id
having count(1) = 5 --the number of users in the query

您还应该考虑从

更改WHERE语句
WHERE a.user_id=116 OR a.user_id=227 OR a.user_id=229 OR a.user_id=613 OR a.user_id=879

WHERE a.user_id in (116, 227, 229, 613, 879)

在SQL中应该是这样的:

Select distinct v.venue_id
from v.venues
join activities a on a.venue_id = v.venue_id
Join users u on u.user_id = a.user_id
Where user_id in (116,227,229,613,879)

你需要把你的表连接起来,以便得到所有有过活动的场所。当你刚刚学习的时候,如果你使用子查询,有时会更容易可视化。

相关内容

  • 没有找到相关文章

最新更新