0

背景: 私は twitter API を使用しています。誰かが私にメンション/メッセージを送信すると、チャットボットに送信されるように設定します。ボットがリプライするので、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

初めてボットに送信するときに、ランダムな会話 ID ( conv_id) を作成して、ボットが会話を追跡できるようにします。

問題はこれを追跡することです。これははしごのようなもので、stat_idno なしrep_to_stat_idでオリジナルにつながり、 common を含める必要がありconv_idます。

これまで、私は常に 1 対多のタイプのテーブルを持っていましたが、これがどのタイプの構造であるかを理解することができませんでした。

各会話のはしごを最初/最後のポイントまでたどるためにクエリに追加するmysqlのオプションはありますか?

4

2 に答える 2

2

階層データをリレーショナル データベースに格納するには、さまざまな方法があります。

最も一般的な方法の 1 つは、言及したすべての列 ( stat_idrep_to_stat_id[nullable]、およびconv_id) を含むテーブルを単純に作成することです。問題は、ルート ノードまでの完全なツリーを取得するには、(MySQL または任意のスクリプト言語で) 再帰関数が必要になり、いくつかのクエリを作成することです。

このスタック オーバーフローの質問は、ツリー構造をモデル化するために使用できるすべてのオプションの概要を説明します。

于 2012-06-11T18:44:01.997 に答える
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
于 2012-06-11T18:41:59.237 に答える