簡體   English   中英

MySQL聊天系統顯示發件人/收件人的最后一條消息和其他人的姓名

[英]MySQL chat system to display last message of sender/receiver AND name of other person

我正在開發一個聊天系統,會話列表必須顯示兩件事:

  1. 發送消息的人的最后消息(我也稱為當前用戶或其他用戶)
  2. 其他用戶的名稱

我遇到問題的部分是第二點。 當前查詢顯示每個會話的最后一條消息,但在我(當前用戶)發送最后一條消息的情況下,而不是我的名字,它應該顯示另一個用戶的名字。

SELECT SQL_CALC_FOUND_ROWS
    u.id_user AS id,
    i.id_user_from,
    i.id_user_to,
    u.name AS name,
    UNIX_TIMESTAMP(i.date_msg) AS date_msg,
    i.message AS msg

    FROM inbox AS i
    INNER JOIN user AS u ON (u.id_user = i.id_user_from OR u.id_user = i.id_user_to)

    WHERE id_msg IN
    (SELECT MAX(id_msg) AS id FROM
    (
        SELECT id_msg, id_user_from AS id_with
        FROM inbox
        WHERE id_user_to = 1

        UNION ALL

        SELECT id_msg, id_user_to AS id_with
        FROM inbox
        WHERE id_user_from = 1) AS t

        GROUP BY id_with
    )

    ORDER BY i.id_msg DESC

在這個例子中,我是Andufo (id_user = 1)。 如果它有幫助,這是一個sqlfiddle鏈接 謝謝!

可能這有幫助

SELECT SQL_CALC_FOUND_ROWS
    u.id_user AS id,
    i.id_user_from,
    i.id_user_to,
    u.name AS name,
    UNIX_TIMESTAMP(i.date_msg) AS date_msg,
    i.message AS msg

    FROM inbox AS i
    INNER JOIN user AS u ON u.id_user = IF(i.id_user_from = 1 /*me*/, i.id_user_to, i.id_user_from)

    WHERE id_msg IN
    (SELECT MAX(id_msg) AS id FROM
    (
        SELECT id_msg, id_user_from AS id_with
        FROM inbox
        WHERE id_user_to = 1

        UNION ALL

        SELECT id_msg, id_user_to AS id_with
        FROM inbox
        WHERE id_user_from = 1) AS t

        GROUP BY id_with
    )
    ORDER BY i.id_msg DESC

請參閱IF mysql運算符

此查詢將有助於:

SELECT SQL_CALC_FOUND_ROWS
       u.id_user AS id,
       i.id_user_from,
       i.id_user_to,
       u.name AS name,
       UNIX_TIMESTAMP(i.date_msg) AS date_msg,
       i.message AS msg
    FROM inbox AS i,
         user  AS u,
         (SELECT MAX(id_msg) AS id_max,
                 id_with
              FROM (
                    SELECT id_msg,
                           id_user_from AS id_with
                        FROM inbox
                        WHERE id_user_to = 1
                    UNION ALL
                    SELECT id_msg,
                           id_user_to
                        FROM inbox
                        WHERE id_user_from = 1
                   ) AS t
              GROUP BY id_with) AS m
    WHERE i.id_msg  = m.id_max
      AND u.id_user = m.id_with
    ORDER BY i.id_msg DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM