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

时间:2016-07-10 06:29:17

标签: php mysql database datetime phpmyadmin

我想将日志显示到按日期排序的最近活动页面。现在我试图将它执行到我的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

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

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

' tracking_log'是您的数据库名称,并且您从该数据库中选择了多个表,因此您需要指定要从哪个表中订购' time'由:

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

或您要使用的数据库中的哪个表' time'从。这将修复错误但不会返回任何结果,因为SELECT子句中有多个表而没有任何关联它们的表。

您需要指定一些要返回结果的公共列,而不是获取通配符,然后指定UNION表以汇总结果。例如,如果您在所有表中都有公共列 userID description time ,则可以执行以下操作:

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

答案 1 :(得分:0)

您要订购哪个表格的时间列?

假设您要按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;

如果相应表格中的所有时间列同时包含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;