2012-06-04 98 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一样。现在你必须按照你想要的方式来设计它,并添加关于日期和其他东西的信息

相关问题