我有3个学生,学院和课程表,我已经完成了一个连接查询,它返回每个学生和他的大学以及他注册的课程。在每个学生的输出中,当他注册多个课程时,有多个记录,其中学生的详细信息和收集详细信息相同。我在这种情况下执行原始sql。我需要以下面的格式在模板上显示它。
学生姓名,大学 - 课程1 - 课程2 - 课程3
这是查询,
cursor=connection.cursor()
result=cursor.execute('''SELECT
s.student_id,
s.student_Name,
c.college_id,
c.college_name,
cs.course_id,
cs.course_name,
FROM student s
INNER JOIN college c on s.student_id=c.college_id
INNER JOIN course cs on s.student_id=cs.course_id''')
请帮忙。
答案 0 :(得分:0)
如果您使用的是MySQL,可以使用GROUP_CONTACT,但实际上您应该使用Django的ORM。在模板中,它应该类似于:
{% for student in students %}
<tr>
<td> {{ student }} </td>
<td> {{ student.colleges | join:', ' }} </td>
<td> {{ student.course | join:', ' }} </td>
</tr>
{% endfor %}
当然,您可以使用select_related来降低SQL查询的数量。
答案 1 :(得分:0)
我自己找到答案,
cursor=connection.cursor()
result=cursor.execute('''SELECT
s.student_id,
s.student_Name,
c.college_id,
c.college_name,
array_agg(cs.course_id),
array_agg(cs.course_name),
FROM student s
INNER JOIN college c on s.student_id=c.college_id
INNER JOIN course cs on s.student_id=cs.course_id
GROUP BY s.student_id,s.student_Name,c.college_id,c.college_name''')
array_agg可以用作MySQL GROUP_CONTACT的等价物(不是真的,但它有效)