C# 如何在不丢失数据的情况下对以下MySql表进行正确分组?
我想按RecordId对下表进行分组,但我不想丢失任何数据。目前,我正在通过电子邮件进行分组,保留所有数据 Id | RecordId | Email | Message | ActionId | ---------------------------------------------------------------------- 1 | 2 | john@example.com | Record inserted | 1 | 1 | 2 | jane@example.com | Record Updated | 2 | 1 | 2 | joe@example.com | Record Deleted | 3 | 执行此查询会产生一条记录,我知道原因,但我丢失了其他记录中的数据,例如电子邮件、消息和ActionId:C# 如何在不丢失数据的情况下对以下MySql表进行正确分组?,c#,mysql,group-by,C#,Mysql,Group By,我想按RecordId对下表进行分组,但我不想丢失任何数据。目前,我正在通过电子邮件进行分组,保留所有数据 Id | RecordId | Email | Message | ActionId | ---------------------------------------------------------------------- 1 | 2 | john@example.com | Record inserte
SELECT * FROM Messages
GROUP BY RecordId
导致
Id | RecordId | Email | Message | ActionId |
----------------------------------------------------------------------
1 | 2 | john@example.com | Record inserted | 1 |
Id |记录Id |电子邮件|消息|操作Id|
----------------------------------------------------------------------
1 | 2 | john@example.com|插入记录| 1|
我是否可以通过RecordId对所有数据进行分组并保留所有数据。我正试图根据RecordId
创建一个记录,同时保留所有数据,以便我可以向email
列中的所有人发送电子邮件,但要使用他们各自的消息(插入记录、删除记录、更新记录)
是否GROUP_CONCAT()
帮助
SELECT RecordId, GROUP_CONCAT(CONCAT_WS(",", Email, Message, ActionId) SEPARATOR ";")
FROM Messages GROUP BY RecordId
注意:有一个
GROUP_CONCAT()
结果长度的限制。因此,如果您预见到要对大量记录进行分组,那么这就不是您的解决方案。下面的查询将在每个记录ID中只返回一条记录,其中包含所有信息。(这个想法有点难看)
您预期的结果是什么?@sgedes-结果有点像初始表,但我只想基于
RecordId
发送1封电子邮件,而不是基于email
发送3封电子邮件,但我想知道解析GROUP\u CONCAT
字段的数据有多困难。我有一种感觉,我会超越极限,这应该不难。您可以将explode()
分解为数组,或者应用好的正则表达式。如果您希望结果很长,那么我不确定是否有方法将纯mySQL分组为一行。使用PHP我想很抱歉,对c不太熟悉,没办法(我收到错误1您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“XML PATH(“”)),[Message]=(选择[Message]附近使用的正确语法。)+';''在第6行SQL9.sql 11
对不起,我写的答案是TSQL,MySQL可能不支持。我应该在发布之前检查一下。
SELECT RecordId, GROUP_CONCAT(CONCAT_WS(",", Email, Message, ActionId) SEPARATOR ";")
FROM Messages GROUP BY RecordId
SELECT RecordId,
EMAIL = ( SELECT EMAIL + ';'
FROM Messages AS M
WHERE Messages.RecordId = M.RecordId
FOR XML PATH('')),
[Message] =(SELECT [Message] + ';'
FROM Messages AS M
WHERE Messages.RecordId = M.RecordId
FOR XML PATH('')),
ActionId =(SELECT ActionId + ';'
FROM Messages AS M
WHERE Messages.RecordId = M.RecordId
FOR XML PATH(''))
FROM Messages
GROUP BY RecordId