2011-05-07 20 views
1

好吧我知道這聽起來很愚蠢。但我已經嘗試了一切。按子鍵分組,但如果新讀取,如果不是1顯示0

這裏是我的代碼與

SELECT toD.username AS ToUser, 
fromD.username AS FromUser, 
rvw.* FROM usermessages AS rvw 

LEFT JOIN users AS toD 
ON toD.id = rvw.touserid 

LEFT JOIN users AS fromD ON fromD.id = rvw.fromuserid 

WHERE touserid = '" . $this->userid . "' 
AND deleted = '0' 

GROUP BY subkey 

ORDER BY rvw.read ASC, rvw.created DESC 

開始的,而這樣做的工作,我所發現的是,如果有新的消息,讀爲0它仍然顯示爲1。我知道這是因爲我將這些行分組在一起。

但我不確定任何其他方式來做到這一點。

+0

什麼是'subkey'? – 2011-05-07 12:20:00

+0

想想它就像您的iPhone短信一樣,它可以讓我們像聊天屏幕一樣顯示消息。幫助我們保持用戶跟隨對話 – RussellHarrower 2011-05-07 12:42:00

+0

子鍵是主題密鑰的簡稱 – RussellHarrower 2011-05-07 12:42:38

回答

0

它不起作用,因爲無論您如何設置您的設置,mysql都可以返回組中的任何行。要使用某個自定義順序在組中查找第一行,必須將其分成兩個任務 - 首先爲您分組的列找到所有不同的值,然後在每個參考值的子查詢中查找第一行。所以你的查詢應該是這樣的:

SELECT toD.username AS ToUser, fromD.username as FromUser, msg.* FROM 
     (SELECT DISTINCT touserid, subkey 
     FROM usermessages 
     WHERE touserid = 'insert_your_id_here' 
     AND deleted=0) msgg 
JOIN usermessages msg 
ON msg.id = (SELECT msgu.id 
       FROM usermessages msgu 
       WHERE msgu.touserid = msgg.touserid 
       AND msgu.subkey = msgg.subkey 
       AND deleted=0 
       ORDER BY msgu.read ASC, msgu.created DESC 
       LIMIT 1) 
JOIN users fromD ON msg.fromuserid = fromD.id 
JOIN users toD ON msg.touserid = toD.id 

確保你有一個索引(touserid,子鍵)。取決於你的數據庫有多大,你可能需要更多。

+0

謝謝你這麼多 – RussellHarrower 2011-05-07 13:53:59

相關問題