mysql在一条语句中查询两个表

r3i60tvu  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(446)

我有一个名为,group的表和另一个名为member的表。组具有groupid、name等字段。。。成员具有memberid、groupid、membername等字段。。。其中groupid是组表的外键。我想在一条语句中查询这两个表,结果输出如下。

[
  {
    "groupId": "8",
    "name": "Test Group 2",
    "status": "0",
    "member": [
      {
        "memberId": "1",
        "groupId": "8",
        "memberName": "tester 1"
      }
    ]
  }
]

我已经研究了内部连接和联合,但不知道如何实现这一点。任何建议都会有帮助。谢谢您。

zbdgwd5y

zbdgwd5y1#

您可以使用2个查询、数组列和数组Map来完成。
首先查询,获取所有需要的组,并将其提取到一个变量中,例如 $groups ```
SELECT group_id, name, status FROM groups

然后从 `$groups` .

$groupIds = implode(',', array_column($groups, 'group_id'));

您将得到 `group_id` 用逗号分隔的字符串。然后在第二个查询中使用它:

"SELECT member_id, group_id, member_name FROM member WHERE group_id IN (" . $groupIds . ")"

把结果取出来 `$members` . 最后的任务是把结果结合起来。

foreach ($groups as $key => $group) {
$groupMember = array_filter($members, function($member) use ($group) {
return $group['group_id'] == $member['group_id'];
});
$group['member'] = $groupMember; // I don't know if this works
$groups[$key] = $groupMember; // if previous line doesn't work
}

p、 如果您使用像laravel这样的php框架,这将非常容易。它有雄辩的一对多和渴望负荷 `with` 方法,您只需:

Group::with("member")->get();

我不知道其他框架,我肯定还有其他框架也能做到这一点。
cwxwcias

cwxwcias2#

你的问题很广泛,但也许这对你有帮助

SELECT user.memberName, group.name
FROM user 
INNER JOIN group ON group.groupId = user.groupId

未测试,但这将从带有 INNER JOIN 您也可以选择其他列,但请确保它们的名称不同。否则选择将失败(你可以通过使用 as 关键字(此处提及)

vkc1a9a2

vkc1a9a23#

你可以使用连接

SELECT * 
    FROM group 
    INNER JOIN member ON group.groupId = member.groupId

但结果是

[
      {
        "groupId": "8",
        "name": "Test Group 2",
        "status": "0",
        "memberId": "1",
         "groupId": "8",
        "memberName": "tester 1"

      }
    ]

主行和明细行之间每个连接的行
sql查询返回表格结果而不是嵌套结果

相关问题