Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从两个表中选择并按日期时间戳排序_Mysql_Select_Union - Fatal编程技术网

Mysql 从两个表中选择并按日期时间戳排序

Mysql 从两个表中选择并按日期时间戳排序,mysql,select,union,Mysql,Select,Union,我有两个类似于下面的MySQL表: MESSAGES_IN messageID receivedDate message MESSAGES_OUT messageID sentDate message 基本上,我想从这两个表中选择消息,并按它们各自的日期排序。例如,如果数据集为: MESSAGES_IN 1 2014-04-24 12:26:33 Test message inbound 2 2014-04-24 19:12:15 Another test message inbou

我有两个类似于下面的MySQL表:

MESSAGES_IN
messageID
receivedDate
message

MESSAGES_OUT
messageID
sentDate
message
基本上,我想从这两个表中选择消息,并按它们各自的日期排序。例如,如果数据集为:

MESSAGES_IN
1  2014-04-24 12:26:33  Test message inbound
2  2014-04-24 19:12:15  Another test message inbound

MESSAGES_OUT
1  2014-04-24 12:31:33  Test message outbound
2  2014-04-24 19:16:15  Another test message outbound
然后我希望输出为:

2014-04-24 12:26:33  Test message inbound
2014-04-24 12:31:33  Test message outbound
2014-04-24 19:12:15  Another test message inbound    
2014-04-24 19:16:15  Another test message outbound
我已尝试下面的查询,但我得到一个错误,即我的ORDER BY是未知列:

SELECT i.receivedDate, i.message
FROM MESSAGES_IN i
UNION
SELECT sentDate, o.message
FROM MESSAGES_OUT o
ORDER BY receivedDate, sentDate;

谢谢大家!

MySQL在使用
UNION
时将使用第一个查询中的列名,因此只需在
orderby
子句中使用第一个查询的列名即可:

SELECT i.receivedDate, i.message
FROM MESSAGES_IN i
UNION ALL
SELECT o.sentDate, o.message
FROM MESSAGES_OUT o
ORDER BY receivedDate
通常使用这样的别名来保持列名的完整性:

SELECT i.receivedDate AS sendreceiveDate, i.message
FROM MESSAGES_IN i
UNION ALL
SELECT o.sentDate, o.message
FROM MESSAGES_OUT o
ORDER BY sendreceiveDate

此外,您可能希望
UNION ALL
以避免在结果中丢失重复的行。

由于列名不同,您可以使用“ORDER BY 1”,即第一列

(SELECT i.receivedDate as messageDate, i.message
FROM MESSAGES_IN i )
UNION
( SELECT o.sentDate as messageDate, o.message
FROM MESSAGES_OUT o )
ORDER BY 1

我相信MySQL在这种情况下也可以使用别名,因此您可以用messageDate替换“1”。

只需按receivedDate写入
ORDER
,而不使用
sentDate
,因为是相同的列结果。您可能需要
全部联合