在PHP MYSQL中跟踪对话

时间:2012-06-11 18:29:25

标签: php mysql twitter

背景:我一直在使用twitter API。安装它,以便当有人提及/给我发消息时,它会被发送到聊天机器人。 Bot做出回复,我用API推文。 除了名为status_id的字段外,每条推文都有一个唯一的rep_to_stat_id,因此对话如下所示:

person 'hi how are you?'          stat_id = 1 rep_to_stat_id = blank
    me 'ok, and you?'             stat_id = 2 rep_to_stat_id = 1
person 'are you stalking me'      stat_id = 3 rep_to_stat_id = 2
    me 'no you are stalking me'   stat_id = 4 rep_to_stat_id = 3

当我第一次发送到bot时,请创建一个随机对话ID(conv_id),以便机器人可以跟踪对话。

问题是跟踪此问题,它就像一个梯子,导致原始stat_id没有rep_to_stat_id,并且必须包含公共conv_id

到目前为止,我总是拥有一对多类型设置的表格,我无法理解这是什么类型的结构。

mysql中是否有一个选项可以添加到查询中,以跟踪每个对话的阶梯到其第一个/最后一个点?

2 个答案:

答案 0 :(得分:2)

有很多方法可以在关系数据库中存储分层数据。

最常见的方法之一就是只提供一个包含您提到的所有列的表格(stat_idrep_to_stat_id [可为空]和conv_id)。问题是,要将完整的树检索到根节点,您需要一个递归函数(在MySQL或您选择的脚本语言中),进行多次查询。

This Stack Overflow question应该为您提供有关树结构建模的所有可用选项的概述。

答案 1 :(得分:1)

一个列标记conversation_id,另一个标记该对话中的迭代

person    text                       conversation_id    reply_num
------------------------------------------------------------------
0         "Hi"                       0                  0
1         "Hello, who are you"       0                  1
0         "I am a bot"               0                  2
1         "Goodbye"                  0                  3
0         "Hi"                       1                  0           //new conversation thread
1         "who is this?"             1                  1
0         "This is a bot"            1                  2
1         "leave me alone"           1                  3