【问题标题】:trying to fetch the last message in mysql试图获取mysql中的最后一条消息
【发布时间】:2017-09-21 01:23:57
【问题描述】:

这是我的查询:

SELECT u.ProfilePic AS FriendPic, u.UserName AS FriendName, m.*
FROM (SELECT PhotographerId
      FROM Messages
      WHERE UserId=? OR PhotographerId=?
      GROUP BY PhotographerId
     ) AS m JOIN
     User AS u
     ON u.UserId = m.PhotographerId;

我正在尝试从表中进行 SQL 查询, - 从所有用户对中获取最后的消息 user ?作为发件人或收件人,并将它们与用户表连接起来以获取名称。我已经设法创建了这样的东西,但仍然想问是否有更简单的

我想获取我们在收件箱中看到的每个用户的摄影师姓名、个人资料照片和最后一条消息..

表 用户:头像、用户名、user_id

消息:用户 ID、摄影师 ID、消息、时间戳

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需的结果。我不认为这个查询符合你的要求。
  • 另外,我们确实需要查看查询,因为它在您的应用程序代码中解析时的样子。 “?”孤立的意义不大。
  • 添加两个表的完整结构。

标签: mysql sql node.js


【解决方案1】:

试试这个:

SELECT m.userid AS 'User id', u1.profile_pic AS 'User pic', u1.username AS 'User name`,
m.photographerid AS 'Photographer id', u2.profile_pic AS 'Photographer pic', 
u2.username AS 'Photographer name`,
m.message, m.timestamp
FROM message m JOIN user u1 ON m.userid = u1.user_id
JOIN user u2 ON m.photographerid = u2.user_id
ORDER BY m.timestamp DESC LIMIT 1;

更新

您可以通过以下查询获取用户的最新消息:

SELECT m.userid, a.photographerid, m.message, a.timestamp
FROM message m
JOIN (SELECT photographerid, MAX(timestamp) as timestamp
FROM message where userid = ?
GROUP BY photographerid
) a
ON m.photographerid = a.photographerid and m.timestamp = a.timestamp
WHERE m.userid = ?

UNION

SELECT a.userid, m.photographerid, m.message, a.timestamp
FROM message m
JOIN (SELECT userid, MAX(timestamp) as timestamp
FROM message where photographerid = ?
GROUP BY userid
) a
ON m.userid = a.userid and m.timestamp = a.timestamp
WHERE m.photographerid = ?

收到消息后,您可以将此查询的输出与用户表连接起来,以获取其他列的值,例如:

SELECT m.userid AS 'User id', u1.profile_pic AS 'User pic', u1.username AS 'User name`,
m.photographerid AS 'Photographer id', u2.profile_pic AS 'Photographer pic', 
u2.username AS 'Photographer name`,
m.message, m.timestamp
FROM (
    SELECT m.userid, a.photographerid, m.message, a.timestamp
    FROM message m
    JOIN (SELECT photographerid, MAX(timestamp) as timestamp
    FROM message where userid = ?
    GROUP BY photographerid
    ) a
    ON m.photographerid = a.photographerid and m.timestamp = a.timestamp
    WHERE m.userid = ?

    UNION

    SELECT a.userid, m.photographerid, m.message, a.timestamp
    FROM message m
    JOIN (SELECT userid, MAX(timestamp) as timestamp
    FROM message where photographerid = ?
    GROUP BY userid
    ) a
    ON m.userid = a.userid and m.timestamp = a.timestamp
    WHERE m.photographerid = ?
) m JOIN user u1 ON m.userid = u1.user_id
JOIN user u2 ON m.photographerid = u2.user_id;

【讨论】:

  • 你将如何获得最后一条消息,你的查询将给出所有消息。
  • @AshutoshSIngh OP 需要如何订购消息的问题并不完全清楚。但是,我已经更新了答案并在其中添加了注释。
  • 完全假设的答案,至少很明显 OP 想要获取用户的最新消息及其详细信息。
  • @Suraz get last messages from all pairs of users 不知道最新消息在哪里。
  • 我只想要最后一条消息。看到我有 2 个表,我想要用户表中的个人资料图片和用户名以及消息表中的最后一条消息和时间
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多