mysql - 获取每个对话的收件人 ID

标签 mysql sql

<分区>

我有一张这样的 table 。

| id-AI | from    | to    | text         |created_date
+----+---------+-------+-------------+-------------
| 1  | 7       | 1     | from 7 to 1  |2015-11-06 04:59:14 
| 2  | 1       | 2     | from 1 to 2  |2015-11-06 04:57:06
| 3  | 7       | 1     | from 7 to 1  |2015-11-06 04:25:45
| 4  | 1       | 6     | from 1 to 6  |2015-11-06 04:25:32 
| 5  | 1       | 5     | from 1 to 5  |2015-11-06 04:25:16

我想要一个这样的列表。一个敲了我或者我敲了他/她或者我们进行了长时间对话的用户的列表。我想要的列表应该是最新的顺序,就像 facebook 消息传递一样。

| users |
+-------+
| 7    
| 2     
| 6
| 5

1 是主 user_id。获取涉及 1 的列表(in to 或 in from)然后这称为对话。

最佳答案

您可以使用以下查询:

SELECT IF (`from` = 1, `to`, `from`)
FROM mytable
WHERE 1 IN (`from`, `to`)
ORDER BY created_date DESC

这将返回涉及user_id = 1每个 对话的创建者或接收者。

Demo here

获取一组有序 不同 user_id 值使用此查询:

SELECT IF (`from` = 1, `to`, `from`)
FROM mytable
WHERE 1 IN (`from`, `to`)
GROUP BY IF (`from` = 1, `to`, `from`)
ORDER BY MAX(created_date) DESC

Demo here

关于mysql - 获取每个对话的收件人 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33560112/

相关文章:

mysql - Symfony2 验证约束

mysql - 如果数据存在 UPDATE else INSERT SQL 查询 - 无外键

mysql建表并为索引设置createtime(int),但是select没有使用,为什么呢?

php - 最佳实践按发布日期排序帖子

mysql - 带有联合查询的下拉列表

sql - 生成存储在表中的两个日期之间的所有日期

mysql - Sequelize 'hasMany' 关联(模型)在查询执行中的属性计数

mysql - 在 Where 中使用 Count 和 Distinct

MySQL 连接来统计事务?

sql - 最后一小时计数和最后收到