我要做的是从用户发送给我的内容中选择最近的消息。
例如,有两个用户:
Richard 给我发了三条消息:
保罗给我发了一条消息:
如何向我显示 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
,我该如何解决? :(谢谢。
答案 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。