2

基本上在这个网络应用程序中,我有一个事件模块,用户可以在其中创建、编辑和删除事件,也可以上传该事件的照片。I'm in其他用户可以通过选择按钮或仅提及事件来参与特定事件Sound's Cool。现在有 3 个表event_photo(用户上传的图片将保存在这里),event_in并且event_cool,现在我需要一个事件活动提要,为此我需要通过将所有 3 个表分组为photoin来组合它们cool。所以我需要建议是否创建一个表来列出这些活动,或者我应该将所有结果合并到 php.ini 中。以前我将所有 2 个结果合并到一个表中,但现在我想尝试一些不同的东西。有表结构。

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

现在应该如何设计表格,我希望这是重要的问题,因为这可以解决有关活动提要的许多问题。谢谢

4

2 回答 2

1

您当然可以使用 UNION:http: //dev.mysql.com/doc/refman/5.1/en/union.html但是,这很慢。最好创建下一个表,比如活动日志,只存储:

  • entity_type (in/cool/photo)
  • entity_id(目标表中行的id)
  • event_id
  • 用户身份
  • 日期

并通过此选择。选择后,为每个目标表单独收集所有 ID,并从作为索引数组返回的表中获取必要的信息(如果需要)。Foreach 活动提要并为其分配所需的正确数据。

希望这可以帮到你。

于 2013-02-11T05:31:35.630 回答
1

一个选项是让您的三个表并使用类似于以下内容的查询它们:

  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 回答