我试图从两个大日志表中一起选择,并获得所有事件的时间顺序结果。
假设我有:
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)
现在我的老板想查看一段时间内所有建筑物的所有访问日志(分页数据):
我需要将数据像 zipper 一样组合在一起:
+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob |
| 2019-01-01 08:10:00 | Bob |
| 2019-01-01 08:20:00 | Peter |
我能想到的最好办法是从两个表中单独选择一个数组(按日期时间排序),使用两组数据对数组进行排序(使用多维数组排序),然后将数组修剪为单个数组页的数据量。 (一想到这个我就累了!)
这里效率很低...有更好的方法吗? (使用MySQL)
最佳答案
您可以只使用 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
逻辑正常工作。
关于mysql - 如何按时间顺序从两个或多个表中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920667/