组合/排序两个日期时间表/数组/列表

时间:2013-08-21 21:14:26

标签: php mysql database sorting

我有两个MySQL表,都有Timestamp(DATE / TIME)...我需要一个查询来组合它们并按时间戳排序它们(2013-08-21 13: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 ...

3 个答案:

答案 0 :(得分:2)

假设Table1.Col1与Table2.Col1具有相同类型的数据,Table1.Col2与Table2.Col2等具有相同类型的数据,那么这可能是最简单的方法。 union中的表必须具有相同的列数。我使用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包含电话号码,则执行此操作没有多大意义。

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

答案 2 :(得分:0)

  

最简单的方法是什么?我应该将两个表放入一个数组然后排序吗?或者我应该使用SQL查询执行此操作?

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

所以你不要自己动手,但让数据库做到这一点。

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