我有两个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 ...
答案 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
,两者都在您的数据库手册中进行了解释。