2013-05-19 29 views
0

我有一張表,其中包含從一個用戶到另一個用戶的個人消息。從包含私人消息的表中選擇最新對話

下面是表結構:

mysql> describe pms; 
+---------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+---------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| time | datetime  | NO |  | NULL |    | 
| from | int(11)  | NO |  | NULL |    | 
| from_ip | int(11)  | NO |  | NULL |    | 
| to  | int(11)  | NO |  | NULL |    | 
| message | varchar(255) | NO |  | NULL |    | 
| read | tinyint(4) | NO |  | 0  |    | 
+---------+--------------+------+-----+---------+----------------+ 

我創建一個視圖,顯示一個特定的用戶ID的10層最新的會話。由於我想找對話,我想到了使用GROUP BY fromto。但是,這會返回重複的行(既來自此用戶又來自此用戶),並且我還注意到排序不起作用。

爲了能夠正確地排列結果並從而選擇最近的10次會話,組應包含組的最後一行而不是第一組。

這裏是我試過的查詢:

SELECT * 
FROM `pms` 
WHERE `from` = 1 
OR `to` = 1 
GROUP BY `from` , `to` 
ORDER BY `id` DESC 
LIMIT 10 

從組給出了錯誤的行,因此通過ID(或時間)訂購給人以錯誤的順序。

任何想法如何讓它工作?

+0

可能重複:http://stackoverflow.com/questions/ 7033789/mysql-how-to-get-non-aggregate-columns-from-a-table-based-on-aggregate-colu – fenway

回答

0

這是假設的對話是由從對以任何順序配對,以及最新的對話有最大的ID定義:

SELECT least(`from`, `to`), greatest(`from`, `to`) 
FROM `pms` 
WHERE `from` = 1 OR `to` = 1 
GROUP BY least(`from`, `to`), greatest(`from`, `to`) 
ORDER BY max(`id`) DESC 
LIMIT 10 
+0

謝謝,似乎工作 – Lassi