mysql - 在 MySQL 中聊天 - 选择 - GROUP BY

标签 mysql sql select group-by distinct

我有这些表:

表名称:user_data

---------------------------
| id | owner |    name    |
---------------------------  
|  1 |  120  |  "Nicolas" |   
|  2 |  140  |   "Angel"  |
---------------------------

表名称:private_messages

--------------------------------------------
| id | ownerID | toUserID | message        |
--------------------------------------------  
|  1 |   120   |   140    | "Hi"           |
|  2 |   120   |   140    | "How are you?" |
|  3 |   120   |   140    | "I miss u"     |
|  4 |   140   |   120    | "Viewed."      |
--------------------------------------------

我需要选择某个用户的所有聊天行,例如,我有用户 ID“120”,我需要进行查询以返回在ownerID或toUserID中显示“120”的所有聊天。

这是我的实际查询:

SELECT
user_data.owner,
ANY_VALUE(user_data.name) name,
ANY_VALUE(private_messages.message) message
FROM private_messages 
INNER JOIN user_data ON private_messages.ownerID = user_data.owner 
WHERE private_messages.owner = "120" OR private_messages.toUserID = "120"
GROUP BY user_data.owner

此查询的结果是:

----------------------------------------
| owner |    name     |    message     |
----------------------------------------  
|  120  |  "Nicolas"  |     "Hi"       |
|  140  |   "Angel"   |   "Viewed."    |
----------------------------------------

但是如果您认为这是错误的,因为这两个元素来自同一个聊天。正确的结果应该是两个用户之间的最后一条消息:

----------------------------------------
| owner |    name     |    message     |
----------------------------------------
|  140  |   "Angel"   |   "Viewed."    |
----------------------------------------

有办法实现吗?

最佳答案

SELECT
user_data.owner,
ANY_VALUE(user_data.name) name,
ANY_VALUE(private_messages.message) message
FROM private_messages 
INNER JOIN user_data ON private_messages.owner = user_data.owner 
WHERE private_messages.touser = "120"
GROUP BY user_data.owner

关于mysql - 在 MySQL 中聊天 - 选择 - GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859877/

相关文章:

java - 从 Java 到 MySQL 的访问被拒绝错误

java - 如何使用 java 代码在 mysql 提示符下触发查询

MySQL MariaDB 在数据类型日期时间列中插入错误时间

MYSQL bool 搜索在同一语句中使用表数据

MySQL从具有多个记录的多个表中选择最高连接值的单个记录

java - 如何将SQL排序规则设置映射到Java比较器?

mysql - 表列转行mysql查询

javascript - 使用每个选择的值填充 jquery 数组

java - 如何在 PLSQL/SQL 中查找存储为 varchar2 的两个日期之间的差异(以秒为单位)

php - HTML 选择选项设置选中的默认回显获取值 php