【问题标题】:Subselecting array in mysql在mysql中选择数组
【发布时间】:2019-01-02 19:30:22
【问题描述】:

我有以下表格:

聊天用户

chatId   | userId        |
---------|---------------|
1        | 1             |
1        | 2             |
2        | 1             |
2        | 3             |

聊天室

chatId   |lastMessageTime|
---------|---------------|
1        | yesterday     | //for example 1000000000
2        | today         | //for example 1532473344

假设我是userId 1

我想加载我所在的所有聊天室。

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

例如在这种情况下:

 [{
   "chatId": 2,
   "users": [1, 3]
 },
 {
   "chatId": 1,
   "users": [1, 2]
 }]

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

$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);

但我无法在选择中进行子选择..

【问题讨论】:

  • 在 MySQL 或任何我知道的 SQL 中没有嵌套结果。

标签: php mysql arrays select


【解决方案1】:
$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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多