2

基本的に、この Web アプリには、ユーザーがイベントを作成、編集、削除できるイベント モジュールがあり、そのイベントの写真をアップロードすることもできます。I'm in他のユーザーは、ボタンを選択するか、イベントに言及するだけで、特定のイベントに参加できますSound's Cool。今のところ 3 つのテーブルがありevent_photoます (ユーザー アップロードの写真はここに保存されます)とevent_in、イベントevent_coolアクティビティ フィードが必要です。したがって、これらのアクティビティをリストする単一のテーブルを作成するか、すべての結果を php で結合するかを提案する必要があります。以前は 2 つの結果すべてを 1 つのテーブルにまとめていましたが、今は別のことを試してみたいと思っています。テーブル構造があります。photoincool

event_photo テーブル

id      photo_url      business_id     event_id         user_id    caption    added_date
1         1111             12             2                3       test1      20130209t1
2         1122             13             3                4       test2      20130209t4
3         1133             14             2                3       test3      20130209t2

event_in テーブル

id  event_id    user_id    date_created
1         2                3       20130209t3

event_cool

id  event_id    user_id  date_created
1         2               4        20130209t5
2         3               3        20130209t6

に基づいて、フィードは次のようになります。date_created desc t6 -> t1

User_3 says cool for  Event_3
User_4 says cool for  Event_2
User_4 added photo for Event_3
User_3 added photo for Event_2
User_3 attending  Event_2
User_3 added photo for Event_2
User_3 added photo for Event_2

さて、テーブルはどのように設計されるべきか、アクティビティフィードに関する多くの問題を解決できるので、これが重要な質問であることを願っています.Thanks.

4

2 に答える 2

1

オプションは、3 つのテーブルを用意し、次のようなクエリを実行することです。

  SELECT *
    FROM
         ( SELECT user_id, 
                  event_id, 
                  date_added as date_created,
                  'photo' as type
             FROM event_photo
            UNION
           SELECT user_id, 
                  event_id, 
                  date_created,
                  'event_in' as type
             FROM event_in
            UNION
           SELECT user_id, 
                  event_id, 
                  date_created,
                  'event_cool' as type
             FROM event_cool
         ) s
  ORDER BY date_created

コードを簡素化するために、ビューを作成できます。

CREATE OR REPLACE VIEW v_ordered_actions AS
  SELECT *
    FROM
         ( SELECT user_id, 
                  event_id, 
                  date_added as date_created,
                  'photo' as type
             FROM event_photo
            UNION
           SELECT user_id, 
                  event_id, 
                  date_created,
                  'event_in' as type
             FROM event_in
            UNION
           SELECT user_id, 
                  event_id, 
                  date_created,
                  'event_cool' as type
             FROM event_cool
         ) s
  ORDER BY date_created;
于 2013-02-11T09:30:52.750 に答える
1

もちろん、UNION を使用することもできます: http://dev.mysql.com/doc/refman/5.1/en/union.htmlただし、これはかなり遅いです。アクティビティ ログのような次のテーブルを作成して、次の場所に保存することをお勧めします。

  • entity_type (イン/クール/写真)
  • entity_id (ターゲット テーブルの行の ID)
  • event_id
  • ユーザーID
  • 日にち

そして、これを介して選択します。それを選択したら、ターゲット テーブルごとにすべての ID を個別に収集し、(必要に応じて) そのテーブルから必要な情報を取得し、インデックス付き配列として返します。Foreach アクティビティ フィードを作成し、それに必要な正しいデータを割り当てます。

これがあなたを助けることを願っています。

于 2013-02-11T05:31:35.630 に答える