首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mysql中的子选数组

mysql中的子选数组
EN

Stack Overflow用户
提问于 2018-07-26 05:37:16
回答 1查看 33关注 0票数 0

我有以下表格:

chatUsers

代码语言:javascript
复制
chatId   | userId        |
---------|---------------|
1        | 1             |
1        | 2             |
2        | 1             |
2        | 3             |

chatRooms

代码语言:javascript
复制
chatId   |lastMessageTime|
---------|---------------|
1        | yesterday     | //for example 1000000000
2        | today         | //for example 1532473344

假设我是userId 1

我想加载我所在的所有chatRooms。

chatRooms.lastMessageTime +订购,我想知道在同一聊天室(chatUsers.userId)中有哪些用户

例如,在这个例子中:

代码语言:javascript
复制
 [{
   "chatId": 2,
   "users": [1, 3]
 },
 {
   "chatId": 1,
   "users": [1, 2]
 }]

有可能吗?我已经设法在没有用户选择的情况下做到了:

代码语言:javascript
复制
$qry = $db->prepare('SELECT cr.chatId FROM chatRooms AS cr INNER JOIN chatUsers AS cu ON cu.chatId = cr.chatId WHERE cu.userId = :userId 
  ORDER BY cr.lastMessageTime DESC, cr.chatId DESC');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->execute();

$chatRooms = $qry->fetchAll(PDO::FETCH_ASSOC);

但是我不能在select中进行子选择。

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 05:44:56

代码语言:javascript
复制
$qry = $db->prepare('SELECT cr.chatId, GROUP_CONCAT(cu.userId) AS users FROM chatRooms AS cr INNER JOIN chatUsers AS cu ON cu.chatId = cr.chatId WHERE cu.userId = :userId ORDER BY cr.lastMessageTime DESC, cr.chatId DESC GROUP BY chatId');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->execute();

$chatRooms = $qry->fetchAll(PDO::FETCH_ASSOC);

通过这种方式,您将获得逗号分隔的字符串形式的用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51528042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档