【问题标题】:social patterns in visits table访问表中的社会模式
【发布时间】:2014-04-01 12:49:29
【问题描述】:

我有一个 (my)sql 表,其中包含以下有关健身房访问的数据:

gym_visits (
  id INT
  customer_id INT
  checkin_time DATETIME
)

每位顾客都有一张个人卡,用于登记健身房。我想知道是否有人多次一起去这个健身房(一起去健身房的朋友)并创建一个社交图。 我认为一个好的标准是,他们是否会在多个(比如说 3 个)场合最多相隔 5 分钟。

最简单的方法是使用例如 php 遍历所有记录并查找该时间跨度内的所有其他记录并创建邻接矩阵,但这需要大量的计算能力和时间。应该有更好的方法来计算它,但我想不出任何方法。你认识一个吗?

【问题讨论】:

  • 您上面的表格结构不会生成社交图,因为它没有定义客户之间的关系。但可以从该表中找出客户在特定时间间隔内进行了多少次访问
  • 确实该表并没有明确定义客户之间的关系,但是因为我们知道每个客户的入住时间,所以每次2人在一定的小时间内都访问时,关系的概率更高跨度。我认为可以使用该数据创建图表。

标签: php sql social-networking


【解决方案1】:

要了解客户一天内是否多次访问,您可以这样做:

SELECT customer_id, count(*) as numberOfVisits
FROM gym_visits
WHERE checkin_time = <some date value>
GROUP BY customer_id

要找出在特定时间间隔内进入健身房的客户的可能朋友,而不需要遍历每个客户的桌子,需要采用不同的策略。一种方法如下:

CREATE TABLE friends
(
    customer_id int,
    friend_id int
    // add other columns as you see fit
)
  1. 用上述结构创建另一个表:

  2. 在gym_visits 表上创建一个插入触发器。当新客户在 NOW() 时间到达时,触发器将在 gym_visits 表中查找在 NOW() - X 分钟之间到达的所有客户(X 是您选择的任何间隔/滚动时间窗口)。然后,此触发器将在该时间间隔内找到的所有客户(即可能的朋友)插入一行到该新客户的朋友表中。通过这种方式,您可以轻松捕捉可能的友谊,并且表格包含所有详细信息,以便您生成可能的友谊的社交图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2021-12-26
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多