Mysql Php结合了3个表

时间:2013-02-11 05:05:40

标签: php mysql

基本上在这个网络应用程序中我有一个事件模块,用户可以创建,编辑和删除事件,也可以上传该事件的照片。其他用户可以通过选择I'm in按钮或仅提及事件Sound's Cool来参与特定事件。 现在有3个表格event_photo(用户上传图片将保存在此处),event_inevent_cool,现在我需要一个事件活动供稿,因为我需要合并所有3个表格将它们分组为photoincool。所以我需要建议是否创建一个表来列出这些活动,或者我应该在php中结合所有结果。以前我将所有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 table

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

,Feed现在就是这样的
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

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

2 个答案:

答案 0 :(得分:1)

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

  • entity_type(在/ cool / photo中)
  • entity_id(目标表中行的ID)
  • event_id的
  • USER_ID
  • 日期

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

希望这可以帮到你。

答案 1 :(得分: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;