1

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

例如有两个用户:

  • 理查德
  • 保罗

理查德给我发了三个信息:

  1. 你好
  2. 你好吗?
  3. 这是怎么回事?

保罗给我发了一条信息:

  1. 你好

我如何向我显示Richard 的 RECENT消息而不是所有三条消息,然后显示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,我该如何解决?:( 谢谢。

4

3 回答 3

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”更改为正确的名称。

于 2012-08-11T21:36:41.277 回答
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.");
于 2012-08-11T20:34:25.253 回答
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。

于 2012-08-11T20:36:25.493 回答