0

我有两个 MySQL 表,都带有时间戳(日期/时间)......我需要一个查询来组合它们并将它们排序在一起,按时间戳(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 ...

4

3 回答 3

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 包含电话号码,那么这样做没有多大意义。

于 2013-08-21T21:24:34.893 回答
0

我会使用 MySQL union 来做到这一点。像这样的查询会做到这一点:

(
  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

于 2013-08-21T21:27:13.823 回答
0

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

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

所以你不要自己做,而是让你的数据库来做。

因此,您可以使用 SQL 查询来做到这一点。最有可能UNIONORDER BY,都在您的数据库手册中进行了解释。

于 2013-08-21T21:32:29.300 回答