Mysql 按日期(时间戳)排序的2个单独的表,以及来自另外2个表的数据
我总共有4个表:posts\u messages、private\u messages、users、posts。 我想显示posts\u messages或private\u messages的所有最后一条消息的列表,按其中任何一条消息中发送的最后一条消息排序 其他两个表(users和posts)包含我希望与最后一条消息一起显示的数据:“users”包含发件人的名称,并将与private_消息的最后一条消息一起显示。 posts表包含post标题,用于显示posts_消息的最后一条消息 **Mysql 按日期(时间戳)排序的2个单独的表,以及来自另外2个表的数据,mysql,sql,Mysql,Sql,我总共有4个表:posts\u messages、private\u messages、users、posts。 我想显示posts\u messages或private\u messages的所有最后一条消息的列表,按其中任何一条消息中发送的最后一条消息排序 其他两个表(users和posts)包含我希望与最后一条消息一起显示的数据:“users”包含发件人的名称,并将与private_消息的最后一条消息一起显示。 posts表包含post标题,用于显示posts_消息的最后一条消息 **私人
私人消息上的发件人id
和张贴消息上的海报id
是用户上的用户id
之一
示例输出:
John Doe: See you (15:05)
Post Title #1: Great idea (14:55)
Post Title #4: Looking good (13:20)
Albert Stein: later Yes, sure..(12:00)
所以我需要从private_消息中获取第24行和第25行,从posts_消息中获取第10行和第11行,并按日期排序
(**重要的不是连接本身(我可以稍后添加此项,以便选择所有字段)-重要的是只获取一行消息,而不重复,如下所示:有多条消息,但您只能从每条不同的消息中获取最后一条消息)
这些表如下所示:
私人信息:
-------------------------------------------------------------------------------
| message_id | sender_id | receiver_id | message_text | date |
-------------------------------------------------------------------------------
| 22 | 20 | 44 | Ok got it |2018-04-27 10:03:47 |
-------------------------------------------------------------------------------
| 23 | 13 | 44 | Very well |2018-04-27 11:49:33 |
-------------------------------------------------------------------------------
| 24 | 20 | 44 | Yes, sure.. |2018-04-27 12:00:15 |
-------------------------------------------------------------------------------
| 25 | 13 | 44 | See you later|2018-04-27 15:05:30 |
-------------------------------------------------------------------------------
---------------------------------------------------------------------------
| message_id | post_id | poster_id | message_text | date |
---------------------------------------------------------------------------
| 8 | 1 | 98 | Hello world | 2018-04-27 12:02:22 |
---------------------------------------------------------------------------
| 9 | 4 | 123 | Hi all | 2018-04-27 13:11:11 |
---------------------------------------------------------------------------
| 10 | 4 | 77 | Looking good | 2018-04-27 13:20:17 |
---------------------------------------------------------------------------
| 11 | 1 | 101 | Great idea | 2018-04-27 14:45:15 |
---------------------------------------------------------------------------
用户:
--------------------------------------------------
| user_id | first_name | last_name |
--------------------------------------------------
| 13 | John | Doe |
--------------------------------------------------
| 20 | Albert | Stein |
--------------------------------------------------
发布信息:
-------------------------------------------------------------------------------
| message_id | sender_id | receiver_id | message_text | date |
-------------------------------------------------------------------------------
| 22 | 20 | 44 | Ok got it |2018-04-27 10:03:47 |
-------------------------------------------------------------------------------
| 23 | 13 | 44 | Very well |2018-04-27 11:49:33 |
-------------------------------------------------------------------------------
| 24 | 20 | 44 | Yes, sure.. |2018-04-27 12:00:15 |
-------------------------------------------------------------------------------
| 25 | 13 | 44 | See you later|2018-04-27 15:05:30 |
-------------------------------------------------------------------------------
---------------------------------------------------------------------------
| message_id | post_id | poster_id | message_text | date |
---------------------------------------------------------------------------
| 8 | 1 | 98 | Hello world | 2018-04-27 12:02:22 |
---------------------------------------------------------------------------
| 9 | 4 | 123 | Hi all | 2018-04-27 13:11:11 |
---------------------------------------------------------------------------
| 10 | 4 | 77 | Looking good | 2018-04-27 13:20:17 |
---------------------------------------------------------------------------
| 11 | 1 | 101 | Great idea | 2018-04-27 14:45:15 |
---------------------------------------------------------------------------
职位:
---------------------------------------------------
| post_id | post_creator_id | post_title |
---------------------------------------------------
| 1 | 22 | Post Title #1 |
---------------------------------------------------
| 4 | 35 | Post Title #4 |
---------------------------------------------------
希望这是可以理解的帖子,
有点复杂,希望可以完成
谢谢 下面是post表的一个示例。这应该显示每个帖子的最新消息。我想这就是你想要的
select post_messages.*
from post_messages,
(
select max(message_id),
post_id
from post_messages
group by post_id -- the greater the message id, the newer the message. You can use date to too if you want, will run slower.
) as post_latest_view
where post_messages.message_id = post_latest_view.message_id;
使用UNION ALL
组合私人消息
和发布消息
然后按日期排序
CONCAT
功能可以将您的消息和消息标题结合起来
date\u格式(日期,(%H:%i)
gethh:mm
dateformat
你可以试试这个
SELECT content FROM (
SELECT CONCAT(u.first_name,' ',u.last_name,':',pm.message_text,' (',date_format(DATE,'%H:%i'),')') content,DATE
FROM private_messages pm
INNER JOIN users u on u.user_id = pm.sender_id
UNION ALL
SELECT CONCAT(p.post_title,':',pm.message_text,' (',date_format(DATE,'%H:%i'),')'),DATE
FROM posts_messages pm
INNER JOIN posts p on p.post_id=pm.post_id
)t
ORDER BY DATE DESC
sqlfiddle:
sqlfiddle:
结果
试试这个(可能需要一个小的调试,因为我没有安装mySQL):
您尝试了哪个查询?您必须加入表。请提供更多信息,以便我们能帮助您。谢谢。示例outoup没有任何列名,我们不知道您正在显示哪些字段。在表格中还包括一些样本数据,以符合您的期望输出。提供一些样本数据和预期结果。这确实提供了有用的数据。Devsi Odedra,我之前有一个连接,只有两个单独的表(消息和用户),但当我想添加其他两个表时,我不知道要trySorry的查询是哪一个,我在帖子中没有说清楚:但是我用更多的数据更新了帖子:重要的部分不是连接本身,我可以简单地选择所有字段,然后添加名称/标题。重要的是,如果每条post/private message的行数超过1行:仅获取1个不同的行(我在post中添加了数据-因此您可以看到private messages和posts messages现在包含更多的行,但只选择每个行中最后一个不同的行而不重复)@pileup此查询如何?在子查询Self-Join
本身上获取MAX(message\u id)
,然后UNION-ALL
这里是示例,没有连接部分。我认为您需要提供您的PHP代码,或者向我们展示从mysql读取的PHP代码中的数据的预期结果。您在读取数据时是如何使用$row
的?我认为您可以从查询结果集中按列名读取日期。您可以参考此如何在mysql上读取别名。我已经有了一个表(我的帖子也有),但问题是将所有4个表组合在一起。很抱歉,我在帖子中没有明确说明:但我用更多数据更新了帖子:重要的不是连接本身,我可以简单地选择所有字段,然后添加名称/标题。重要的是,如果每条post/private消息超过一行:只获取一行不同的行(我在post中添加了数据-因此您可以看到private消息和post消息现在包含更多的行,但只选择每一行中最后一行不同的行而不重复)