簡體   English   中英

SQL查詢一組2個用戶

[英]SQL query for a set of 2 users

我的數據庫中有一個表,用於保存用戶之間的消息。

表“ dt_inbox”具有以下結構:
-messageid(PK)
-fromid =>由userid = A發起的消息
-toid =>消息已發送給userid = B
-對話ID =>對話ID
-dateent =>發送消息的日期
-inbox_view =>標志0或1以了解是否已讀取消息
-inboxdelete =>標志0或1以了解消息是否已刪除

我正在嘗試創建一個查詢,以獲取用戶ID A的所有消息的列表:-由用戶A發送至用戶B(C,D,E ...)或由用戶B發送(C,D, E ...)到用戶A =>從id A-> toid B或fromid B-> toid A發送的消息應顯示在一行中。
-每對用戶fromid / toid都應顯示在一行中。
-顯示用戶A和B之間最后一條消息的datemax(datesent)
-由datemax訂購
-inboxdeleted = 0,inbox_view = 0。

這是我的查詢,但對於userid = 12,結果與預期不符:

SELECT messageid, conversationid, fromid, toid,
                (SELECT MAX(datesent) FROM dt_inbox dd WHERE dd.conversationid =     d.conversationid) as datemax,
                (SELECT count(*) FROM dt_inbox dd WHERE dd.conversationid=d.conversationid) as messagesnr,
                (SELECT count(*) FROM dt_inbox dd WHERE dd.conversationid=d.conversationid AND dd.inboxview=0 AND toid=12) as unreadsrn
            FROM dt_inbox d
            WHERE (toid = 12 AND inboxdelete=0
            OR fromid = 12 AND inboxdelete=0)
            GROUP BY conversationid
            ORDER BY datemax DESC

得到以下結果:

messageid  conversationid  fromid  toid  datemax  messagesnr  unreadsrn
     1239            2139    12     159   date       1             0    
     1238            2138    12      22   date       1             1    
     1237            2137    12     159   date       1             0    
     1236            2136    12      22   date       1             0
     1235            2135    159     12   date       1             1    
     1234            2134    159     12   date       1             1        

在此示例中,對於userid = 12,我只希望該用戶和所有其他用戶之間只有最后一條消息, 而如果消息fromid或toid為12則不要做任何區別

我希望我的結果為:

messageid  conversationid  user1  user2  direction  datemax  messagesnr  unreadsrn
     1239            2139    12     159   from        date       1           0    
     1238            2138    12      22    to         date       1           1    

新列“方向”將是一個標志,顯示是否來自或到userid = 12的最后一條消息。

預先感謝您的幫助,我真的被封鎖了:(

還沒有嘗試過;-)但是也許是正確的方法。

SELECT max(messageid) as messageid, conversationid, fromid, toid,
       datemax, messagesnr, unreadsrn, toid as tmp_toid
    FROM dt_inbox
    WHERE fromid=12
    GROUP BY toid
JOIN
SELECT max(messageid) as messageid, conversationid, fromid, toid,
       datemax, messagesnr, unreadsrn, fromid as tmp_fromid
    FROM dt_inbox
    WHERE toid=12
    GROUP BY fromid
ON tmp_toid=tmp_fromid

暫無
暫無

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

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