2011-05-03 18 views
0

目前,我正在开发一个开源的Business Intelligence软件从零开始使用PHP/MySQL的时间机器。时间机器的商业智能(PHP/MySQL的)

我的时间机器表是由需要最新信息(如订单,产品等),他们与time_id结合所有其他表使用。因此,它的MySQL表是这样的:

time_id | timestamp | day | week | month | quarter 
1   1303689654 25  17  4   2 
2   1303813842 26  17  4   2 
... 

Order表结合这样的:

order_id | time_id ... 
3123   2 
... 

编辑:它类似于STAR SCHEMA

问题出在时间(13:45)信息。通常我不需要这个,但是和订单一样,有时候一些表需要这个HOUR/MINUTE信息。

我该如何巧妙地解决这个问题?我有几个解决方案,但首先我想看看你的意见..

+1

看起来像一个设计缺陷。使所有其他表依赖于时间表。为自己做个忙,用简单的时间戳替换time_id列。并添加将这些信息分析到您需要的各个组件的逻辑。 – netbrain 2011-05-03 08:17:10

+0

我不明白这个的目的。为什么不使用'DATETIME'字段?您可以从中提取所有其他信息(日,周,月...)。 – 2011-05-03 08:18:31

+0

@netbrain - 我使用此表进行实时分析(BI)。所以这就像启动模式。所以我必须这样做。 – dino 2011-05-03 08:22:25

回答

2

你为什么不简单地在其他表中存储时间戳?或者,如果您想保留日期表,只需将TIME字段添加到其他需要它的表中。

+0

+1根据你的解决方案,我的时间机器表中不再需要'TIMESTAMP'。我的意思是,我可以使用'Ymd'(20110403)而不是TIMESTAMP。因为如果我需要时间,我可以从其他表格中获得。谢谢...... – dino 2011-05-03 08:32:29

0

如果我正确理解你的时间戳,你可能只是去:

echo date('H:i.s',1303689654); 

编辑

你到底想干什么?重新阅读您的问题后,您可能正在寻找SQL中的JOIN关键字(brief tute

+0

问题是,如果一天中有多个TIME,那么您必须为一天创建多个时间戳。但我不应该创造一天以上的时间。到目前为止,ThiefMaster的解决方案解决了这个问题。 – dino 2011-05-03 08:19:44

+1

噢,好的。通常时间戳对于个人操作是独一无二的,所以ThiefMaster的回答非常合适。 +1 – Ben 2011-05-03 08:22:34