2016-09-24 123 views
0

我設計了一個羣聊功能(閱讀功能,用戶和工作人員是多對多的)表格結構。我想要獲取羣聊的未讀評論列表(mysql,SQL)

我想獲得員工未讀消息的列表,但我不能。如果你寫了什麼查詢,或者將檢索未讀消息的列表。

SQL

select * from chat as c inner join chat_group as cg on c.chat_group_id = cg.id left join chat_read cr on c.id = cr.chat_id 

表結構

user: id, name 

    staff: id, name 

    chat_group: id, name 

    chat: id, chat_group_id, user_id, staff_id, comment 

    chat_read: id, chat_id, user_id, staff_id 

數據例如

user: 
    1, hoge_user 
    2, foo_user 

    staff: 
    1, hoge_staff 
    2, foo_staff 

    chat_group: 
    1, test_group 

    chat: 
    1, 1, null, 1, "hello hoge_staff" 
    2, 1, 1, null, "hello hoge_user" 

    chat_read: (Comments posted on their own will not be registered as read) 
    1, 1, null, 1 
    2, 2, 1, null 
    3, 1, null, 2 <- foo staff also read not do anything 
    4, 2, null, 2 
+0

解決在評論或消息表,則需要另一列「狀態」與值0和1。1表示已經閱讀和0表示未讀。 –

+0

你需要包括你想要澄清你想要做的結果。例如,你說你想要「未讀消息」,但是你的數據模型中沒有任何東西被稱爲「消息」,並且不清楚如何確定是否有「未讀」消息。 –

回答

0

您的問題是比較模糊的。但我希望查詢到這個樣子:

select c.* 
from chat c 
where c.staff_id is not null and -- a "staff message" 
     not exists (select 1 
        from chat_read cr 
        where cr.chat_id = c.chat_id 
       ); -- is "unread" 
2

從我的角度來看,你可以有聊天表中的一個標誌,你可以管理聊天消息的狀態。

這樣你就可以查詢這樣的:

select * from chat c, chat_group cg where c.chat_group_id = cg.id and c.status = 'READ'; 

可以使該標誌爲int和從你的代碼管理它創建一個枚舉。這是類似的東西,我們在https://www.applozic.com