gpt4 book ai didi

php - 从表中查找最新消息,在 mysql 中按用户分组

转载 作者:可可西里 更新时间:2023-11-01 07:32:43 25 4
gpt4 key购买 nike

我的网站上有一个私有(private)消息表,现在我有一个单独的收件箱和发件箱。我想合并收件箱/发件箱,只显示特定用户的最新消息。

TLDR:我想显示发送给每个用户或从每个用户分组的最新消息。

表格示例

|  id | fromuser | fromid | touser | toid | message    |  timestamp            |
--------------------------------------------------------------------------------
| 1 | user1 | 1 | user2 | 2 | Hello.. | 2015-01-01 00:00:00 |
| 2 | user1 | 1 | user3 | 3 | okay... | 2015-01-02 00:00:00 |
| 3 | user3 | 3 | user1 | 1 | not.... | 2015-01-03 00:00:00 |
| 4 | user2 | 2 | user3 | 3 | New.... | 2015-01-04 00:00:00 |
| 5 | user2 | 2 | user1 | 1 | With..... | 2015-01-05 00:00:00 |
--------------------------------------------------------------------------------

我在用户 1 中寻找的结果

|  id | fromuser | fromid | touser | toid | message    |  timestamp            |
--------------------------------------------------------------------------------
| 3 | user3 | 3 | user1 | 1 | not.... | 2015-01-03 00:00:00 |
| 5 | user2 | 2 | user1 | 1 | With..... | 2015-01-05 00:00:00 |
--------------------------------------------------------------------------------

使用下面的代码,我可以让它向每个用户显示一条消息,但它显示最旧的消息而不是最新的消息。

mysql_query("SELECT m1.*, users.id AS userid, users.username 
FROM pm AS m1, pm AS m2, users
WHERE ((m1.fromuser='".$_SESSION['userName']."' AND users.id=m1.toid)
OR (m1.touser='".$_SESSION['userName']."' AND users.id=m1.fromid))
AND m2.id=m1.id ORDER BY timestamp DESC");

最佳答案

试试这个:

选择 * 来自消息 m 不存在的地方( 选择 1 来自留言mm 其中(mm.fromuser = m.fromuser 或 mm.fromuser = m.touser)和(mm.touser = m.touser 或 mm.touser = m.fromuser) 和 mm.timestamp > m.timestamp ) 和 m.fromuser = 'user1' 或 m.touser = 'user1';

demo here .

future ,将两个用户之间的对话标记为特定对话可能会更好,这样每条消息都属于一个对话,因此更容易找到用户参与的对话以及有关消息的信息与对话有关。无论如何。

试试这个。呃。

select m.* 
from messages m
left join messages m2
on ((m.fromuser = m2.fromuser and m.touser = m2.touser)
or (m.fromuser = m2.touser and m.touser = m2.fromuser))
and m.timestamp < m2.timestamp
where (m.fromuser = 'user1' or m.touser = 'user1')
and m2.id is null;

它可能优于 not exists 版本,即使我确实设法修复了那个版本。

this fiddle actually works

关于php - 从表中查找最新消息,在 mysql 中按用户分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com