2016-07-10 89 views
0

我想按日期排序显示日志到最近活动页面。现在,我试图执行此以我的MySQL选择多个表并按datetime列排序显示它们

"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)

我该如何取它们按时间排序?

在此先感谢!

+0

指定下'time'属于你的表名。 'ORDER BY tableName.time ASC' – 1000111

+0

“如果某列不明确,则意味着查询中的多个表有一个具有该名称的列。” (с)http://stackoverflow.com/questions/25721307/error-code-1052-column-datetime-in-where-clause-is-ambiguous – IceJOKER

+0

所有这些表都有时间栏。我想从4个表格中提取所有这些数据并按时间排序。我怎么做? – technoken

回答

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; 
+0

嘿它现在工作!谢谢。我只需要重新输入网址。哈哈谢谢! – technoken

+0

那么,你正在使用哪个版本?与'coalesce'或没有'coalesce'? – 1000111

0

“tracking_log”是你的数据库名称,而你从数据库中选择多个表,所以你需要从你想订购的时间“,这表规定:

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

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

您需要指定一些您想要返回结果的公共列,而不是获取通配符,然后使用UNION表来聚合结果。举例来说,如果你有相同的列用户ID描述时间在所有的表,你可以做到以下几点:

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

我试过了。没有错误但不从数据库中获取任何东西。 '$ sql =“SELECT * FROM tracking_log.editlog,tracking_log.deletelog,tracking_log.loginlog,tracking_log.logoutlog ORDER BY tracking_log.loginlog.time ASC”; \t $ result = mysql_query($ sql)或die(mysql_error()); \t $ row = mysql_fetch_array($ result); \t for($ i = 0; $ i <3; $ i ++){ \t \t echo $ row [$ i]; \t} – technoken

+0

现在的问题是,您有多个表,但没有MYSQL可用于将所有数据放在一行中的表的公共参考点。如果您执行“从tracking_log.loginlog ORDER BY tracking_log.loginlog.time ASC中选择*”,您将获得结果。是否有可用于关联表格的公共字段或标识? – Chi

相关问题