1

こんにちは、データのエコーアウトに問題があります。3 つのテーブルがあり、1 つは学生用、クラス用、および Student_classes 用です。3 つすべてを結合するようにデータベースに問い合わせたので、クラスに登録しているかどうかにかかわらず、すべての学生を確認できます。SQLは

SELECT students.id, students.student_name, students.student_number,
section_student.ss_id, section_student.section_number,sections.subject 
FROM students 
LEFT JOIN student_classes
ON students.student_number=student_classes.student_number 
LEFT JOIN classes 
ON classes.class_number=student_classes.class_number 
WHERE students.status=1

これにより、クラスがある場合は、クラスを持つ学生のリストが生成されます。複数のコースに登録している学生の場合、名前がリストに 2 回表示されます。

取得したデータをprint_rすると

Array
(
[0] => stdClass Object
    (
        [class_number] => 
        [student_name] => john smith
        [student_number] => 432100351
        [id] => 2
        [ss_id] => 
        [subject] => 
        [user_email] => john@email.com
        [created_at] => 0000-00-00 00:00:00
        [updated_at] => 0000-00-00 00:00:00
    )

[1] => stdClass Object
    (
        [class_number] => 43223
        [student_name] => Paul jones
        [student_number] => 432100312
        [id] => 3
        [ss_id] => 40
        [subject] => Maths
        [user_email] => Paul@email.com
        [created_at] => 0000-00-00 00:00:00
        [updated_at] => 2012-11-24 08:33:23
    )

[2] => stdClass Object
    (
        [class_number] => 21331
        [student_name] => Paul jones
        [student_number] => 432100312
        [id] => 3
        [ss_id] => 39
        [subject] => Physics
        [user_email] => Paul@email.com
        [created_at] => 0000-00-00 00:00:00
        [updated_at] => 2012-11-24 08:33:23
    )

学生とそのクラスを表示するためにテーブルで for each を実行すると、学生が 1 行で持っているクラスをループしたいと思います。例えば

ジョン ID:432100351 | 該当なし ポール ID:432100312 | 43223 = 数学、21331 = 物理

ループを実行すると、

ID:432100351 ジョン | john@email.com | 該当なし
ID:432100312 ポール | paul@email.com | 43223 = 数学 , 21331 = 物理
ID:432100312 ポール | paul@email.com | 43223 = 数学、21331 = 物理

問題が私のSQLにあるのかループにあるのかわかりません

ここにコードがあります

@foreach ($students as $student)
<tr>
<td> {{ $key++ }}</td>
<td> {{ HTML::link('students/edit/' .$student->id, $student->student_number) }} </td>
<td> {{ HTML::link('students/edit/' .$student->id, $student->student_name) }} </td>
<td> {{ $student->user_email }} </td>
<td>


    @if(!isset($student->ss_id)) 

        {{ HTML::link('add_student_section.php?student_id='.$student->id,'Add to section'); }}

    @else 

        @foreach($students as $section) 

         {{ HTML::link('edit_student_section.php?ss_id=', $section->section_number . " " . $section->subject . " ") ;}}     

        @endforeach

    @endif    

</td>
<td> {{ date("d-M-Y H:i",strtotime($student->created_at )) }} </td>
<td> 
@if($student->updated_at == $student->created_at)

N/A

@else

{{ date("d-M-Y H:i",strtotime($student->updated_at )) }} 
@endif

</td>
<td> {{ HTML::link('students/delete/' .$student->id, 'Delete Student') }} </td>
</tr>
@endforeach

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

0

GROUP_CONCATと組み合わせて GROUP BY を使用する必要があります

SELECT students.id, students.student_name, students.student_number,GROUP_CONCAT(classes.class_number) as student_classes
FROM students 
LEFT JOIN student_classes
ON students.student_number=student_classes.student_number 
LEFT JOIN classes 
ON classes.class_number=student_classes.class_number 
WHERE students.status=1 GROUP BY students.id
于 2012-11-25T09:48:06.703 に答える
0

以下の例のようにクエリでdistinctorを使用しますgroup by

SELECT students.id, students.student_name, students.student_number,
section_student.ss_id, section_student.section_number,sections.subject 
FROM students 
LEFT JOIN student_classes
ON students.student_number=student_classes.student_number 
LEFT JOIN classes 
ON classes.class_number=student_classes.class_number 
WHERE students.status=1 group by students.student_number,sections.subject
于 2012-11-25T09:34:20.463 に答える