基本上在这个网络应用程序中我有一个事件模块,用户可以创建,编辑和删除事件,也可以上传该事件的照片。其他用户可以通过选择I'm in
按钮或仅提及事件Sound's Cool
来参与特定事件。
现在有3个表格event_photo
(用户上传图片将保存在此处),event_in
和event_cool
,现在我需要一个事件活动供稿,因为我需要合并所有3个表格将它们分组为photo
,in
和cool
。所以我需要建议是否创建一个表来列出这些活动,或者我应该在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
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的许多问题。谢谢
答案 0 :(得分:1)
你当然可以使用UNION:http://dev.mysql.com/doc/refman/5.1/en/union.html但是,这很慢。也许最好创建下一个表,比如活动日志,在哪里存储:
并通过此选择。选择后,为每个目标表单独收集所有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;