访问表中的社交模式

时间:2014-04-01 12:49:29

标签: php sql social-networking

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

gym_visits (
  id INT
  customer_id INT
  checkin_time DATETIME
)

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

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

1 个答案:

答案 0 :(得分: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是您选择的任何间隔/滚动时间窗口)。然后,此触发器将为在该间隔中找到的所有客户(即可能的朋友)插入一行,以将该行插入该新客户的朋友表中。通过这种方式,您可以轻松捕获可能的友谊,并且该表包含所有详细信息,以便您生成可能存在友谊的社交图。