[英]MySQL how to solve One-to-one relation
我有一個與MySQL的一對一聊天實現。 目標是為一個用戶提供最后一條消息的所有唯一對話。 即使我在主鍵上使用MAX並按第二列對MySQL進行了拒絕。
下面的查詢給出錯誤:SELECT列表的表達式#2不在GROUP BY子句中,並且包含未聚合的列'm.id',該列在功能上不依賴於GROUP BY子句中的列;
我正在使用MySQL版本8。
我在這里想念的是什么?
留言表
id | member_a_id | member_a_status | member_b_id | member_b_status | conversation_id | content | created_dt
對話表
id | member_a_id | member_a_status | member_b_id | member_b_status | conversation_id | content | created_dt | last_activity_dt
查詢:
SELECT
MAX(m.id) AS msgid, m.*
FROM
message m
WHERE m.conversation_id IN
(SELECT
c.id
FROM
conversation c
WHERE (
c.member_a_id = 600
AND c.member_a_status NOT IN (0, 3)
)
OR (
c.member_b_id = 600
AND c.member_b_status NOT IN (0, 3)
))
GROUP BY m.conversation_id
ORDER BY m.id DESC;
沒有樣本數據,您的問題將很難遵循。 但是,如果使用MySQL 8+,則應該使用窗口函數。 查詢如下所示:
SELECT cm.*
FROM (SELECT m.*,
ROW_NUMBER() OVER (PARTITION BY m.conversation_id ORDE BY m.id DESC) as seqnum
FROM message m JOIN
conversion c
ON m.conversation_id = c.conversation_id
WHERE 600 IN (c.member_a_id, c.member_b_id) AND
c.member_a_status NOT IN (0, 3)
) mc
WHERE seqnum = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.