我总共有4个表:posts_messages,private_messages,users,posts。 我想显示posts_messages或private_messages的所有最后消息的列表,按其中任何一个发送的最后一条消息排序。
其他2个表(用户和帖子)包含我想要显示的数据以及最后一条消息:" users"包含发件人的姓名,并且与private_messages'一起显示。最后的消息。 posts表包含帖子标题,并且要显示在posts_messages'最后的消息。
sender_id
上的private_messages
和poster_id
上的posts_messages
是user_id
上的users
之一
示例输出:
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)
所以我需要从posts_message中获取private_messages和第10行和第11行中的第24行和第25行,并按日期排序
(**重要的不是连接本身(我以后可以添加它,所以我可以选择所有字段) - 重要的部分是只获取单行消息而不重复,如下所示:有多条消息,但您只能从每条不同的消息中获取最后一条消息)
表格如下:
private_messages:
-------------------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------------------
用户:
--------------------------------------------------
| user_id | first_name | last_name |
--------------------------------------------------
| 13 | John | Doe |
--------------------------------------------------
| 20 | Albert | Stein |
--------------------------------------------------
posts_messages:
---------------------------------------------------------------------------
| 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 |
---------------------------------------------------
希望这是可以理解的帖子, 有点复杂,希望可以做到 谢谢!
答案 0 :(得分:0)
这是邮政表的一个例子。这应该显示每个帖子的最新消息。我想这就是你想要的。
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;
答案 1 :(得分:0)
使用UNION ALL
合并private_messages
和posts_messages
然后ORDER BY DATE
CONCAT
功能可以将您的消息与message_title结合起来date_format(DATE,'(%H:%i)')
获取hh: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:https://www.db-fiddle.com/f/nL5apRJ8pWVqDQuFzH5pp7/1
SELECT CONCAT(message_title,':',message_Content) content
FROM (
SELECT CONCAT(u.first_name,' ',u.last_name) message_title,CONCAT(pm.message_text,date_format(DATE,'(%H:%i)')) as 'message_Content',DATE
FROM private_messages pm
INNER JOIN users u on u.user_id = pm.sender_id
UNION ALL
SELECT p.post_title,CONCAT(pm.message_text,date_format(DATE,'(%H:%i)')) message_content,DATE
FROM posts_messages pm
INNER JOIN posts p on p.post_id=pm.post_id
)t
ORDER BY DATE DESC
sqlfiddle:http://sqlfiddle.com/#!9/b255c5/8
<强>结果强>
答案 2 :(得分:0)
试试这个(可能需要一个小的调试,因为我没有安装mySQL):
select line from(
( select CONCAT(u.first_name, ' ', u.last_name, ': ', p.message_text, ' (',
DATE_FORMAT(p.date, '%H:%i'), ')') as line, p.date as date from users u,
private_messages p where u.user_id = p.sender_id )
UNION
( select CONCAT(po.post_title, ': ', m.message_text, ' (',
DATE_FORMAT(m.date, '%H:%i'), ')') as line, m.date as date from
posts_messages m, posts po where po.post_id = m.post_id )
order by date DESC
)