为了账号安全,请及时绑定邮箱和手机立即绑定

从多对多表中选择所有数据的最有效方法是什么?

从多对多表中选择所有数据的最有效方法是什么?

PHP
HUX布斯 2022-07-16 10:17:22
我在下面设计了多对多表:activity----------idnameactivity_student----------idactivity_idstudent_idstudent----------idname每个学生可以参加很多活动,每个活动可以有很多参与者。我想从活动中选择,同时我想将参与者收集为数组。我想要制作的最终数据如下:[  id => 1,  name => football club activity,  participants =>    [      [        id => 1,        name => example student,        class => 3      ],      [        id => 3,        name => example student2,        class => 5      ]    ]]我尝试为 student_id 选择 activity.* 和 group_concat。然后我使用 foreach 语句检索了学生的数据。但我认为这不是最佳实践,因为查询时间超过 10 秒,超过 10,000 行。最佳做法是什么?我正在使用 CI4,带有 InnoDB 引擎的 mysql 数据库。
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

在 SQL 中执行复杂的任务几乎总是比将大量数据拖回客户端然后处理数据更有效。特别是在您要来回访问数据库的情况下。


阅读有关JOIN.


SELECT  a.name AS ActivityName,

        s.name AS StudentName,

        ...

    FROM activity AS a

    JOIN activity_student AS map  USING(activity_id)

    JOIN student AS s  USING(student_id)

    WHERE ...

您会得到一个类似表格的结构,其中包含 ActivityName、StudentName 等。在其中WHERE您可以过滤到一个活动或其他任何内容。


关于映射的有效模式的提示:http: //mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信