我想显示聊天消息列表。
为此,我有一个 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/