2013-08-21 48 views
0

我有两个MySQL表,都有时间戳(日期/时间)...我需要一个查询来组合它们并按照时间戳排序在一起(2013-08-21 13点十三分47秒)。结合/排序两个日期时间表/数组/列表

Table 1 
--------------------------------------- 
Timestamp | Col 1 | Col 2 | Col 3 


Table 2 
--------------------------------------- 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 

我想打印出来

PRINT OUT (in order by timestamp) 
---------------- 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 

什么是最简单的方法是什么?我应该把这两个表放入一个数组然后排序?或者我应该这样做一个SQL查询?

我使用PHP MySQL的& ......

+0

你打算如何在第4列中添加时间戳值?类型是否兼容? –

+0

@GordonLinoff这就是格式化在这里看起来的样子,我的意图是在同一个col中有时间戳...对此抱歉。 –

+0

@GordonLinoff也是,这就是打印出来的样子......我只需要将它打印出来......不要存储它,所以类型无关紧要。 –

回答

2

假设Table1.Col1具有相同的数据类型为Table2.Col1的,Table1.Col2具有相同的数据类型为Table2.Col2等,那么这可能是最简单的方法。联盟中的表必须具有相同的列数。我使用NULL来代替Col4。您可能需要ORDER BY子句中的其他列。

select T1.Timestamp, T1.Col1, T1.Col2, T1.Col3, NULL as Col4 
from Table1 
union all 
select T2.Timestamp, T2.Col1, T2.Col2, T2.Col3, T2.Col4 
from Table2 
order by Timestamp 

只有当名称相似的列具有相同类型的数据时,才有意义。如果Table1.Col1包含名称,并且Table2.Col1包含电话号码,则执行此操作没有多大意义。

0

我会用一个MySQL联合来做到这一点。像这样的查询将做到这一点:

(
    SELECT 
    id, 
    NULL AS col, 
    time 
    FROM 
    table1 
) 
UNION 
(
    SELECT 
    id, 
    col, 
    time 
    FROM 
    table2 
) 
ORDER BY time 

这样,你的结果集将包含所有相同的列,其中,如果你在两个查询用PHP做它,你可能会不存在的指数结束了,再加上它的速度较慢。

这里有一个SQLFiddle: http://sqlfiddle.com/#!2/f7416/10

0

什么是最简单的方法是什么?我应该把这两个表放入一个数组然后排序?或者我应该这样做一个SQL查询?

您的数据库针对查询数据进行了优化,包括聚合和收集数据以及对数据进行分类和排序。

所以你不这样做,而是让你的数据库做到这一点。

所以你用SQL查询来做到这一点。最有可能的UNION and ORDER BY,都在数据库手册中解释。