2013-07-26 184 views
1

我有一個PHP消息系統,其工作原理如下。PHP消息系統線程系統

message_thread表 ID(PK),user1_deleted,user2_deleted

消息 ID,thread_id單(FK),消息,MESSAGE_DATE,SENDER_ID,receiver_id,sender_deleted,receiver_deleted

我試圖獲取列表只要使用查詢信息表的最後一條消息線程以下

$sql = "SELECT thread_id, msg, sender_id, receiver_id, MAX(message_date) AS msg_date FROM messages WHERE (sender_id = '$user_id' AND sender_deleted = 0) OR (receiver_id = '$user_id' AND receiver_deleted = 0) GROUP BY thread_id. 

這工作,但不顯示最後的消息。它只顯示第一條消息。

有人知道什麼可能是錯的嗎?

感謝

+2

通過message_id desc添加一個訂單,看看是否有效。 – Maximus2012

+0

GROUP BY thread_id order by id desc。 – Maximus2012

+1

我真的希望'$ user_id'這樣的值[正確地逃脫](http://bobby-tables.com/php),因爲它看起來並不像你在這裏做的任何事情,以避免嚴重的[SQL注入漏洞]( http://bobby-tables.com/)。 – tadman

回答

1

末與此查詢中,以顛倒順序

ORDER BY message_date DESC 

至於爲什麼會有結果只有一個。我們要看到實際的腳本是什麼樣子。

2

這爲我工作

$sql = "SELECT * FROM ( 
    SELECT id, thread_id, msg, sender_id, receiver_id, msg_date 
    FROM messages 
    WHERE (sender_id = '$user_id' AND sender_deleted = 0) OR (receiver_id = '$user_id' AND receiver_deleted = 0) 
    ORDER BY msg_date DESC 
) AS SQLi GROUP BY thread_id"; 

感謝所有的捐款。