我正尝试从两个大日志表中选择一个,并按时间顺序列出所有活动。
假设我有:
Table: MyDb.Building_A
+---------------------+--------------+
| DateTime | Employee | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob |
(... millions more rows)
And then another table: MyDb.Building_B
+---------------------+--------------+
| DateTime | Employee | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:10:00 | Bob |
| 2019-01-01 08:20:00 | Peter |
(... many millions more rows)
现在我的老板希望查看一段时间内所有建筑物的所有访问日志(分页数据):
我有点需要像拉链一样将数据放在一起:
+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob |
| 2019-01-01 08:10:00 | Bob |
| 2019-01-01 08:20:00 | Peter |
我能想到的最好的办法是从两个表中分别选择一个数组(ORDER BY DateTime),用两组数据对数组进行排序(使用多维数组排序),然后将数组修整为单个页面价值的数据。 (我只是想这件事就累了!)
这里效率低下...还有更好的方法吗? (使用MySQL)
答案 0 :(得分:0)
您可以只使用UNION
查询(在此示例中,获取今年的所有访问权限):
(SELECT `DateTime`, Employee
FROM MyDb.Building_A
WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
UNION
(SELECT `DateTime`, Employee
FROM MyDb.Building_B
WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
ORDER BY `DateTime`
UNION
将从每个表中获得所有符合DateTime
条件的行,而ORDER BY
将按DateTime
对所有行进行排序,将建筑物A和B。
请注意,我假设您的DateTime
列是MySQL Date
或DateTime
数据类型。如果不是,则可能需要使用STR_TO_DATE
进行转换,以使BETWEEN
逻辑起作用。