在相同的结果下对重复的mysql结果进行分组

时间:2014-04-09 19:57:35

标签: javascript mysql sql

我正在使用我无法修改的现有数据库结构的聊天系统。

我试图获取特定用户离线时收到的消息(假设用户是我)。

目前,我的查询为我提供了以下结果:

[ { username: 'Chico',
    message: 'chicoMessage1',
    sentBy: 23 },
  { username: 'rep',
    message: 'repMessage1',
    sentBy: 59 },
  { username: 'Chico',
    message: 'chicoMessage2',
    sentBy: 23 },
  { username: 'rep',
    message: 'repMessage2',
    sentBy: 59 } ]

上述结果意味着用户" Chico"发给我2条消息,用户" rep"发给我的也是2。我们会看到邮件的内容以及邮件发件人的ID。

最终结果我想得到,所以我可以有效地使用它,将上面的内容用于每个用户名,以相同的用户名分组。

所以基本上这样的事情会很好:

[ { username: 'Chico',
    messages: ['chicoMessage1', 'chicoMessage1' ],
    sentBy: 23 },
  { username: 'rep',
    messages: ['repMessage1', 'repMessage2' ],
    sentBy: 59 } ]

我可以用MySQL做到吗?这是我现在的查询(导致前面提到的结果):

  SELECT tusers.username, messages.message, messages.sentBy
  FROM messages
  JOIN offlineconversations
  ON messages.messageID = offlineconversations.messageID
  JOIN tusers
  ON tusers.id = messages.sentBy \
  WHERE offlineconversations.userID = 100;

表格如下:

tusers

id |用户名|密码

讯息

messageID |消息| sentBy

offlineconversations

userID | MESSAGEID

MySQL可以实现我想要的吗?如果没有,你会怎么做(在JS中)?

谢谢

1 个答案:

答案 0 :(得分:1)

使用GROUP_CONCAT函数和GROUP BY子句:
https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

SELECT tusers.username, messages.sentBy, 
       GROUP_CONCAT( messages.message ) As messages 
  FROM messages
  JOIN offlineconversations
  ON messages.messageID = offlineconversations.messageID
  JOIN tusers
  ON tusers.id = messages.sentBy 
  WHERE offlineconversations.userID = 100
GROUP BY tusers.username, messages.sentBy;