MySQL从按日期排序的两个表中选择

时间:2017-04-27 18:15:16

标签: php mysql sql

初学者,所以请放轻松我:)

所以我的数据库中有这两个表

回复表

+------------------------------------------------+
| message_id | client_id | message | date_posted |
+------------------------------------------------+

请求表(完全相同)

+------------------------------------------------+
| message_id | client_id | message | date_posted |
+------------------------------------------------+

问题:

他们提供我正在测试的消息传递应用程序,但现在我不知道如何查询这些表,以便从两个表中按日期排序所有聊天。例如

  

客户14(2小时前):你好//来自请求表
  Admin(1小时前):欢迎//来自回复表

所以消息首先显示为最早的...

我尝试在 JOIN 上使用clien_id,因为这就是我想要的。但是,它似乎无法发挥作用。

我也尝试从包含UNION ALL的子查询中进行选择,也没有运气......有关如何做到这一点的任何想法?提前谢谢!

2 个答案:

答案 0 :(得分:1)

select a.message
from table1 a
inner join
table2 b 
on a.client_id=b.client_id 
order by a.date_posted desc;

答案 1 :(得分:1)

您正在寻找union。在您的情况下,join会将两个表中的列组合成一行,您可以将多个表中的union行组合到一个结果集中。

您需要单独附上select语句,然后添加order子句。

编辑:根据OP的评论更新此答案以包含源表的列

(select source='reply_table', * from reply_table)
union
(select source='request_table', * from request_table)
order by date_posted desc

MySQL的文档相当不错,其工会页面概述了几种排序方案:https://dev.mysql.com/doc/refman/5.7/en/union.html

但是针对您案件的具体说明是:

  

要使用ORDER BY或LIMIT子句对整个UNION结果进行排序或限制,请为各个SELECT语句加上括号,并将ORDER BY或LIMIT置于最后一个之后。