目的:我的任务是从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>
答案 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 结果集。