2016-11-30 62 views
1

我有一個列表 「消息」排序名單,保留了分組字符

recei | sender |date(timestamp)| id 
--------+--------+---------------+---- 
Nickel | Lisett | 3.10.1991 | 1 
    Tom | Nickel | 4.12.1991 | 2 
Lisett | Nickel | 03.9.1991 | 3 
Nickel | Lisett | 01.9.1991 | 4 
    Tom | Nickel | 15.9.1991 | 5 
Nickel | Tom | 2.10.1991 | 6 

當我做這個SQL查詢:

SELECT *, IF(recei='Nickel', sender, recei) AS name 
FROM messages WHERE recei='Nickel' OR sender='Nickel' 
ORDER BY name, date; 

我得到以下結果

  name   | recei | sender | date |id 
(=interlocutor of Nickel)|  |  |   | 
--------------------------+--------+--------+---------+---- 
      Lisett   | Nickel | Lisett |3.10.1991| 1 
      Lisett   | Lisett | Nickel |03.9.1991| 3 
      Lisett   | Nickel | Lisett |01.9.1991| 4 
      Tom   | Tom | Nickel |4.12.1991| 2 
      Tom   | Tom | Nickel |15.9.1991| 5 
      Tom   | Nickel | Tom |2.10.1991| 6 

但是我想在名單上列出鎳的最後一位對話者:所以我想訂購組「Lisett」(行w名字(Interlocutor)Lisett)和「湯姆」在最早的日期。在這個特殊情況下,將組「Tom」放在組「Lisett」之上。所以說,查找組內最早的日期,並將組中的早期日期放在另一個之上。那可能嗎?

回答

0

你可以使用一個內部聯接爲獲得date_max並用此列排序

SELECT a.* , IF(a.recei='Nickel', a.sender, a.recei) AS name 
FROM messages as a 
INNER JOIN (SELECT IF(recei='Nickel', sender, recei) as name, max(date) date_max 
     FROM messages WHERE recei='Nickel' OR sender='Nickel' 
     group by name) t on t.name = IF(a.recei='Nickel', a.sender, a.recei) 
WHERE a.recei='Nickel' OR a.sender='Nickel' 
ORDER BY t.date_max, name, a.date 
+0

似乎是在代碼中的一些錯誤,但我不能找到它。當我在phpmyAdmin中運行代碼時,我收到了幾條錯誤消息。其中有 表示預期。 (在位置10附近的「IF」) –

+0

抱歉,但代碼仍然不工作:(同樣的錯誤信息 –

+0

請告訴我確切的錯誤信息..不是一部分.. – scaisEdge