![](/img/trans.png)
[英]Private chat system MYSQL query to display last message of sender/receiver
[英]MySQL chat system to display last message of sender/receiver AND name of other person
我正在開發一個聊天系統,會話列表必須顯示兩件事:
我遇到問題的部分是第二點。 當前查詢顯示每個會話的最后一條消息,但在我(當前用戶)發送最后一條消息的情況下,而不是我的名字,它應該顯示另一個用戶的名字。
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.