获取用户的最近消息

时间:2012-08-11 20:30:30

标签: php mysql phpmyadmin message

我要做的是从用户发送给我的内容中选择最近的消息。

例如,有两个用户:

  • 理查德

Richard 给我发了三条消息:

  1. 你好吗?
  2. 什么事?
  3. 保罗给我发了一条消息:

    1. 如何向我显示 Richard的 最近消息而不是所有三条消息,然后显示 Paul的一条消息(显然它们是按发送时间排序。)

      这就是我所拥有的......

      $query = mysql_query("SELECT * FROM `private_messages` WHERE `to_id`='$session_user_id' AND `id`=(SELECT MAX(id) FROM `private_messages`) ORDER BY `time_sent` DESC") or die("Error.");
      

      这只显示第一条消息,即max id,我该如何解决? :(谢谢。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您只想显示每个人发送给您的最后一条消息......

为此,您可以使用派生表并将两者连接在一起。

SELECT *
FROM
    (
        SELECT MAX(id) AS message_id
        FROM private_messages
        WHERE to_id='$session_user_id'
        GROUP BY sender_id
    ) msg_ids
JOIN private_messages ON msg_ids.message_id = private_messages.id
ORDER BY time_sent DESC;

我试试这个查询。 确保将GROUP BY子句中的字段名称“sender_id”更改为正确的名称。

答案 1 :(得分:0)

试试这个,选择to_id等于$session_user_id的最新讯息:

$query = "SELECT * FROM `private_messages` WHERE `to_id`='$session_user_id' ORDER BY `time_sent` DESC LIMIT 0, 1";
mysqli_query($query) or die("Error.");

理想情况下,您需要添加一列from_id,以便只过滤掉两个人之间的消息:

$query = "SELECT * FROM `private_messages` WHERE (`to_id`='$session_user_id' AND `from_id`=[FROM_ID_GOES_HERE_]) ORDER BY `time_sent` DESC LIMIT 0, 1";
mysqli_query($query) or die("Error.");

答案 2 :(得分:0)

与其他答案一样,除此之外,由于过滤了来自用户,因此也只会获得三条消息中的两条。

$query = "SELECT * FROM `private_messages` WHERE `to_id`='$session_user_id' AND from_id='rich_uid' ORDER BY `time_sent` DESC LIMIT 0, 1";
mysqli_query($query) or die("Error.");

修改

要使用此查询,您需要了解Rich的用户ID,即他的“$session_user_id”,并将您选择的新字段(此处显示为from_id)添加到此表的架构中,用它来过滤Rich的ID。