SELECT * FROM多个表,按ID分组

时间:2014-02-18 18:22:16

标签: php mysql sql join

目的:我的任务是从PHP辅导预约webapp导出复杂数据集,并将其转换为包含按STUDENT_ID排序的学生数据的Excel文件。

我有3个包含数据的MySQL表。它们都有一个STUDENT_ID字段。

我需要创建一个查询,从4个表中检索所有数据,根据STUDENT_ID分组到一行。

某些表包含同一STUDENT_ID的多个条目。如果可能的话,我希望这些多个条目组合成一行(这样每个唯一的STUDENT_ID都在一行上)。

到目前为止,这是我所拥有的,但它似乎并不像我期望的那样。

SELECT *
from ssp_student t1
INNER JOIN ssp_student_quarterly t2 
ON t1.STUDENT_ID = t2.STUDENT_ID 
INNER JOIN ssp_weekly_progress t3 
ON t2.STUDENT_ID = t3.STUDENT_ID
GROUP BY t1.STUDENT_ID

表架构:

Table 1: 
| STUDENT_ID | PEER_COACH_ID | ACTIVE | COHORT | WEEKLY_MEETING_TIME | FYE_ID | RC | AGREEMENT_SIGNED | RELEASE_SIGNED | NOTES | FACULTY_ADVISOR |

Table 2:
| STUDENT_ID | QUARTER | COUNSELLING_OFFICE | WRITING_CENTER | CASE_MANAGEMENT | SSP_SOCIAL_EVENTS | SSP_SUCCESS_SEMINAR | HOME_SUPPORT | ACCOMODATION_USED | DISCOVERY_PATHWAYS | PEER_COACHING |

Table 3:
| STUDENT_ID | QUARTER | WEEK | EMAIL_INTERACTION | PHONE_INTERACTION | TEXT_INTERACTION | INPERSON_INTERACTION | SOCIAL_INTERACTION | NUMBER_OF_SOCIAL_INTERACTIONS | CASE_MANAGEMENT_INTERACTIONS | NUMBER_OF_CASE_mANAGEMENT_INTERACTIONS | SUCCESS_SEMINAR_INTERACTION | NUMBER_OF_SUCCESS_SEMINAR_INTERACTIONS | OTHER_INTERACTION | THEMES | SURVEY_ID | NOTES |

我需要的内容:我想为每个STUDENT_ID添加1行,其中包含与表1,2和3中STUDENT_ID相关的所有数据的列。 / p>

3 个答案:

答案 0 :(得分:0)

如果您使用SELECT *并且您说某些表包含同一学生的多行,则您将永远不会只获得一行。尝试选择与您要显示的学生ID相关的字段。

如果您要显示的任何字段是多个条目之一,那么它将无效,每个条目将显示一行。

答案 1 :(得分:0)

如果您真的想将每行的数据连接到一个字段,那么您的SELECT语句可以执行以下操作:

SELECT t1.STUDENT_ID, GROUP_CONCAT(t2.Field1 SEPARATOR ', ') AS t2Field1Concat,
                      GROUP_CONCAT(t2.Field2 SEPARATOR ', ') AS t2Field2Concat,
                      GROUP_CONCAT(t3.Field1 SEPARATOR ', ') AS t3Field1Concat,
                      GROUP_CONCAT(t3.Field2 SEPARATOR ', ') AS t3Field2Concat

在上面的示例中,您必须为t1.STUDENT_ID以外的每个字段执行此操作。

答案 2 :(得分:0)

您好像是在4个独立的数据组之后,除了学生ID之外几乎没有任何共同点。您应该为每个执行单个查询,然后将数据组合成PHP中的相关格式。

像这样将所有4个表连接在一起,最终会出现一个充满重复数据的潜在 MASSIVE 结果集。