Mysql 按日期(时间戳)排序的2个单独的表,以及来自另外2个表的数据

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_消息的最后一条消息 **私人

我总共有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)
    get
    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:

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消息现在包含更多的行,但只选择每一行中最后一行不同的行而不重复)