2017-05-06 26 views
1

有了這個私人聊天表 enter image description here獲取唯一的行有兩列

在我的留言頁面上我想顯示最新的會話列表的組合。名單將是一樣,如果是從PC發送消息PC2PC2發送回PC那麼它應該只顯示一行。

我嘗試這個查詢

SELECT ID,COL2,COL3,COL4 FROM yourtable GROUP BY COL2,COL3;

Selecting distinct 2 columns combination in mysql

但它造成

enter image description here

更新:

我嘗試這個查詢

SELECT * FROM tbl_primessages where frmid = 3466或toid = 3466 GROUP BY frmid,toid ORDER BY tbl_primessagestimestemp DESC

更新2 它應該與兩個

+0

「那麼它應該只顯示一行。」 - 哪一個 - 爲什麼? –

+0

@PaulSpiegel我認爲OP只是想在每對用戶之間交換最新的消息。 –

+0

@TimBiegeleisen我也這麼想。但是如果OP在問題中清楚的話,那會更好。 –

回答

3

下面的查詢使用最少/最大的技巧將涉及同一對用戶的消息分組在一起。然後,我們可以保留每對人的最新對話。

SELECT t1.* 
FROM tbl_primessages t1 
INNER JOIN 
(
    SELECT 
     LEAST(frmid, toid) AS frmid, 
     GREATEST(frmid, toid) AS toid, 
     MAX(timestamp) AS latest_ts 
    FROM tbl_primessages 
    GROUP BY LEAST(frmid, toid), GREATEST(frmid, toid) 
) t2 
    ON LEAST(t1.frmid, t1.toid) = t2.frmid AND 
     GREATEST(t1.frmid, t1.toid) = t2.toid AND 
     t1.timestamp = t2.latest_ts 

演示在這裏:

Rextester

+0

我想你也在ON條款 –

+0

@PaulSpiegel中使用'最少/最大'感謝您的編輯。在手機上回答這些問題尤其痛苦。 –

0

最新的時間在選擇使用從GROUP BY加上一些聚合函數隻字段(COUNT,AVG,MIN,MAX,等等)。

SELECT frmid, toid 
FROM tbl_primessages 
Where frmid = 3466 OR toid = 3466 
GROUP BY frmid, toid 
+0

這並不回答這個問題。但是,您不能在ORDER BY子句中使用'timestemp',因爲它沒有在GROUP BY中列出。 –

+0

ORDER BY刪除,感謝@PaulSpiegel,只是從源查詢中複製它。 – Edward