繁体   English   中英

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

[英]Combining / Sorting two datetime tables/arrays/lists

我有两个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 ......

假设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包含电话号码,则执行此操作没有多大意义。

我会使用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

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

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

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

所以你用SQL查询来做到这一点。 最有可能是UNIONORDER BY ,两者都在数据库的手册中解释过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM