2012-06-04 80 views
2

我正在研究一個mysql/php私人消息系統,並且我遇到了使用MYSQL代碼的問題。我希望獲得用戶之間對話中發送/接收的最後一條消息。喜歡這個頁面的facebook https://www.facebook.com/messages/。 (這是不是真的很容易用語言來解釋這個問題。)Mysql php在與用戶相關的會話中獲取最後一條消息

我對郵件的MySQL表是這樣的:

`id`   -> unique ID, autoincremented 
`message_from` -> sender user ID 
`message_to` -> receiver user ID 
`message`  -> message 
`date_created` 
`ip`    
`status`  -> read or not read 

這不是在我的頭上怎麼辦呢清楚,所以我沒有初始腳本顯示。

+0

我看不到鏈接導致我沒有FB(FB es el DIABLO),但可能你可以使用mysql語句使用用戶ID獲取消息表中的最後一個ID並獲得最後一條評論 – jcho360

+0

我同意jcho360。您可能需要傳入兩個ID,因爲我認爲接收器也可以處於多個對話流中。你總是可以通過最新的「Date_created」來檢索它。 – em3ricasforsale

回答

0

也許是這樣的:

SELECT 
    * 
FROM 
    tblMessage 
    JOIN(
      SELECT 
       MAX(date_created) AS maxCreated, 
       message_from 
      FROM 
       tblMessage 
      GROUP BY 
       message_from 
     ) AS Latest 
    ON tblMessage.date_created=Latest.maxCreated 
    AND tblMessage.message_from=Latest.message_from 
2

這會給你的每個聊天的最新消息。每個聊天都由message_from和message_to ID標識。

SELECT 
* 
FROM messages m1 
WHERE date_created = (SELECT MAX(m2.date_created) FROM messages m2 WHERE m1.message_from = m2.message_from AND m1.message_to = m2.message_to) 

如果你想有一個特定聊天,只需添加一個

AND message_from = $yourUserId 
AND message_to = $yourOtherUserId 

對不起,如果這是你正在尋找沒有什麼,我不會點擊Facebook上的鏈接。

1

首先構造查詢以獲取所有對話和最後發送消息的日期;對話被定義爲發送者和接收者的獨特組合。

SELECT message_from, message_to, MAX(date_created) AS max_date 
FROM messages 
WHERE message_from = :user OR message_to = :user 
GROUP BY message_from, message_to 

:user只是對當前登錄的用戶佔位符。

爲了得到一個會話內從最近消息的實際數據,你必須與原始表加入結果反饋:

SELECT message, date_created, status 
FROM messages 
JOIN (
    SELECT message_from, message_to, MAX(date_created) AS max_date 
    FROM messages m 
    WHERE message_from = :user OR message_to = :user 
    GROUP BY message_from, message_to 
) AS lm ON m.date_created=lm.max_date AND m.message_from=lm.message_from AND m.message_to=lm.message_to 
1
SELECT f . * FROM (SELECT * FROM message a WHERE (LEAST(a.message_from, a.message_to) , GREATEST(a.message_from, a.message_to) , a.sent) IN (SELECT LEAST(b.message_from, b.message_to) AS x, GREATEST(b.message_from, b.message_to) AS y, MAX(b.date_created) AS msg_time FROM message b GROUP BY x, y))f WHERE ".$mainUser." IN (f.message_from, f.message_to)ORDER BY f.date_created DESC limit $pageLimit,".$per_page 

只是複製此查詢,看看在phpMyAdmin

0

您可以使用此

$recup_messages = mysqli_query($connection, SELECT * FROM messages WHERE 

(message_from = $yourUserId AND message_to = $yourOtherUserId) OR (message_from = $yourUserId AND message_to = $yourOtherUserId) ") or die(mysqli_error($connection)); 

while($affichage = mysqli_fetch_assoc($recup_messages)) 
{ 
$message_from = $affichage['message_from']; 

$message = $affichage['message']; 

echo "From : $message_from <br> $message <br><br>"; 

} 

這將顯示您的消息一個接一個就像facebook一樣。現在你必須按照你想要的方式來設計它,並添加關於日期和其他東西的信息

相關問題