国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

聊天記錄列表mysql查詢,如何設(shè)計聊天數(shù)據(jù)庫?

悉地網(wǎng)



1640 3 4
3個回答

Tinywan

WebSocket教程:消息持久化實現(xiàn)與應(yīng)用 https://mp.weixin.qq.com/s/3uQY6HrFvv-1jTXxl_z9Kw

charlescc

聊天記錄表(messages)
message_id:消息唯一標(biāo)識(主鍵)
sender_id:發(fā)送者ID(關(guān)聯(lián)到用戶表的user_id)
receiver_id:接收者ID(關(guān)聯(lián)到用戶表的user_id,如果是群聊,此處可以是群組ID)
message_type:消息類型(例如:文本、圖片、視頻等)
content:消息內(nèi)容
timestamp:發(fā)送時間

再建一個聊天列表表(用戶id,跟聯(lián)系人id,唯一索引)。

聊天列表表(chat_list)
list_id:聊天列表唯一標(biāo)識(主鍵)
user_id:用戶ID (關(guān)聯(lián)到用戶表的user_id)
contact_id:聯(lián)系人ID(對于單聊,是對方的用戶ID;對于群聊,是群組ID)
last_message_id:最后一條消息的ID 關(guān)聯(lián)到消息表的message_id
unread_count:未讀消息數(shù)

每當(dāng)一個新消息被發(fā)送,你需要執(zhí)行以下操作:

在聊天記錄表messages表中插入新消息記錄時,聊天列表表的邏輯如下:
檢查chat_list表中是否已存在與該消息相關(guān)的記錄(基于user_id和contact_id)。
如果存在,更新該記錄的last_message_id和增加unread_count。
如果不存在,插入一條新記錄到chat_list,并設(shè)置last_message_id和unread_count。

最后查詢列表 就很簡單了。

SELECT cl.user_id, cl.contact_id, cl.unread_count, m.content, m.timestamp
FROM chat_list cl
JOIN messages m ON cl.last_message_id = m.message_id
WHERE cl.user_id = ?  
ORDER BY m.timestamp DESC;
  • 悉地網(wǎng) 2024-04-12

    多謝大佬分享,我來試一下

  • 悉地網(wǎng) 2024-04-13

    聊天列表用戶,最后一條消息,最后發(fā)送時間

  • charlescc 2024-04-13

    有l(wèi)ast_message_id,不就什么都有了么? 語句都寫好了

  • 悉地網(wǎng) 2024-04-13

    太感謝,我想了3天也查詢出來,趕緊試下你的方案

  • 悉地網(wǎng) 2024-04-17

    但是兩個用戶聊天是相互的啊,他們的未讀消息數(shù)也是不同的
    發(fā)送一條消息chat_list表是不是要同時創(chuàng)建2條記錄?

  • 悉地網(wǎng) 2024-04-17

    還得關(guān)聯(lián)表查詢用戶資料啊
    包括頭像?用戶名?

  • appf 2024-04-17

    chat_list 表中 unread_count
    如果2人在時時對話,
    發(fā)送人增加未讀count 和 接收人清除未讀count ,
    同寫sql
    大佬您的是怎么處理的

  • 悉地網(wǎng) 2024-04-17

    chat_list 我是同時創(chuàng)建2條記錄?

  • appf 2024-04-17

    chat_list 發(fā)消息時創(chuàng)建一條就可以了,
    我表達(dá)的是
    a-b 對話 a和b都在聊天窗口

    a 發(fā)消息時 chat_list 表中的count +1
    b 在聊天窗口時,消息已讀,請求清理 count =1 未0 ,a-b這一步的sq count 字段反復(fù)寫入清空

    讓a-b時時聊天中如何不產(chǎn)生 chat_list 的重復(fù)寫入優(yōu)化

    我在用的方法是點擊進(jìn)對話存入 緩存該用戶對話窗口ID 讓后端判斷

  • 悉地網(wǎng) 2024-04-18

    可能你的更高級一點吧

ichynul

session對話表。
發(fā)送人id與接收人id拼一起,按大小排序。
如無論1發(fā)給2還是2發(fā)給1,記錄的值都是:1_2,這樣就只有一條記錄。

id:1 (自增主鍵)
key:1_2 (兩個人id按大小排序用_連接)
uid1:1  (兩個人中小那個id)
uid2:2 (兩個人中大那個id)
last_message_id:1 (共用,對話最新那條消息id)
last_read_message_id1:0(小id已讀消息id)
last_read_message_id2:1(大id已讀消息id)
unread_count_1:1(小id未讀數(shù)量)
unread_count_2:0(大id未讀數(shù)量)
  • 悉地網(wǎng) 2024-04-17

    說的好像有道理,好方法

  • 悉地網(wǎng) 2024-04-17

    只是
    last_read_message_id1:0(小id已讀消息id)
    last_read_message_id2:1(大id已讀消息id)
    這點不太明白

  • ichynul 2024-04-17

    已讀id,小于等于這個id的消息是已讀,大于的消息是未讀。
    對話雙方兩個人,就有兩個這種id

  • 悉地網(wǎng) 2024-04-17

    這個不要也沒事吧?

  • 悉地網(wǎng) 2024-04-17

    查詢時比較麻煩吧

年代過于久遠(yuǎn),無法發(fā)表回答
??