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

标签 php mysql sql

这里是初学者,所以请对我放轻松:)

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

回复表

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

请求表(完全相同)

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

问题:

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

Client 14 (2 hours ago): Hello there // Coming from request table
Admin (1 hour ago): Welcome // Coming from reply table

所以消息首先显示最旧的......

我尝试在clien_id上使用JOIN,因为这就是我想要的。不过好像没啥作用。

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

最佳答案

联合正是您所寻找的。在您的情况下,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

但是针对您的情况的具体说明是:

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one.

关于php - MySQL从按日期排序的两个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665194/

相关文章:

php - 如何在mysql中获取特定日期?

SQL Server 使用条件在 VIEW 中添加计算列

sql - 将两个表与查询表连接起来

php - 比较php中的数组,而不关心顺序

php - CRYPT_BLOWFISH 中盐的长度

php - 工单消息在行空间中\r\n

c# - 选择mysql之间的日期

mysql - 如何取消隐藏 mysql workbench 中的关系线?

MySQL - 如果没有重复则加入

sql - 如何在 PostgreSQL 中选择最大计数