mysql - 有条件地对不同的列进行 GROUP BY

标签 mysql sql

我想显示聊天消息列表。

为此,我有一个 SELECT 语句:

SELECT id, `from`, sent, message, recd FROM chat 
WHERE id IN(
  SELECT MAX(id) FROM chat
  WHERE `to` = ? GROUP BY `from`
)
ORDER BY id DESC

问题是,我想有条件地选择 to = maria 和 from = maria 的消息。

也就是说,如果 to = maria 我想按 from 分组,如果 from = maria,我想按

如何动态更改此GROUP BY

最佳答案

我会得到一个 UNION。

(SELECT id, 'from' as direction, m_from AS fromto, sent, message, recd
FROM chat WHERE id IN (SELECT MAX(id) FROM chat WHERE to = 'Maria' GROUP BY m_from))
UNION
(SELECT id, 'to' as direction, m_to AS fromto, sent, message, recd FROM chat
WHERE id IN (SELECT MAX(id) FROM chat WHERE m_from = 'Maria' GROUP BY to))

如果您选择 MAX(id),则不需要 ORDER BY id 语句。

您可以像我对“direction”所做的那样在 SELECT 子句中添加额外的字段。

关于mysql - 有条件地对不同的列进行 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964781/

相关文章:

mysql - 带有更新的 Mysql 存储过程

mysql - 表数据导入向导 'Could not determine delimiter'

sql - PostgreSQL 查询 : selecting devices and their one parameter according to devices' another parameter's value

sql - 重复的列名...但仅当数据库不区分大小写时

php - SQL 字符串替换为 ID 语句

php - 如何引用我刚刚插入到 MySQL 表中的行?

mysql - mysql 中的主从复制

mysql - sql中两个表的列求和

php - Laravel 如何在创建 7 天后删除数据库记录

sql - 从表中选择前 N 个随机行,然后按列排序