我正在使用我无法修改的现有数据库结构的聊天系统。
我试图获取特定用户离线时收到的消息(假设用户是我)。
目前,我的查询为我提供了以下结果:
[ { 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中)?
谢谢
答案 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;