选择多个表并按日期时间列排序显示它们

Selecting multiple tables and displaying them ordered by datetime column

我想将日志显示到按日期排序的最近活动页面。现在我试图对我的 mysql

执行此操作

"SELECT * FROM tracking_log.editlog, tracking_log.deletelog, tracking_log.loginlog, tracking_log.logoutlog ORDER BY time ASC";

但它总是说 Column 'time' in order clause is ambiguous

所有表都有一个时间列,按日期时间格式 (0000-00-00 00:00:00)

我如何按时间顺序获取它们?

提前致谢!

'tracking_log' 是您的数据库名称,您要从该数据库中选择多个 table,因此您需要指定要从哪个 table 订购 'time' 来自:

select * from tracking_log.editlog, tracking_log.deletelog ORDER BY tracking_log.editlog.time ASC

或您要从中使用 'time' 的数据库中的任何一个 table。这将修复错误,但不会 return 任何结果,因为您在 SELECT 子句中有多个 table,但没有任何关联。

您需要指定一些您想要 return 结果的公共列,而不是获取通配符,然后 UNION tables 来聚合结果。例如,如果您在所有 tables,您可以执行以下操作:

(SELECT userID, description, time FROM tracking_log.editlog) 
UNION 
(SELECT userID, description, time FROM tracking_log.deletelog)
ORDER BY time

您想按哪个 table 的时间栏排序?

假设您要按 tracking_log.editlog.time 列对结果集进行排序,则查询如下所示:

SELECT 
* 
FROM tracking_log.editlog, tracking_log.deletelog, 
     tracking_log.loginlog, tracking_log.logoutlog 
ORDER BY tracking_log.editlog.time ASC;

以防万一 table 中的所有时间列都不同时包含 NOT NULL 值,那么我想您需要使用 COALESCE

查询使用 COALESCE

SELECT 
* 
FROM tracking_log.editlog, tracking_log.deletelog, 
     tracking_log.loginlog, tracking_log.logoutlog 
ORDER BY 
COALESCE(tracking_log.editlog.time , tracking_log.deletelog.time, tracking_log.loginlog.time,tracking_log.logoutlog.time)   ASC;