1

Here is my table enter image description here

What I want to happen is to get the latest grades in English for students and ignore students who don't have one. It should show like this:

{"date":"2017\/7\/13","student_id":2,"grade":"C"}<br>
{"date":"2017\/7\/1","student_id":3,"grade":"D"}<br>
{"date":"2017\/4\/1","student_id":5,"grade":"E"}

However, in the code that I have, this is what I show

{"id":2,"date":"2017\/5\/1","student_id":1,"grade":"A","subject":"Science","created_at":null,"updated_at":null}<br>
{"id":3,"date":"2017\/7\/13","student_id":2,"grade":"C","subject":"English","created_at":null,"updated_at":null}<br>
{"id":4,"date":"2017\/2\/1","student_id":3,"grade":"A","subject":"English","created_at":null,"updated_at":null}<br>
{"id":5,"date":"2017\/6\/1","student_id":4,"grade":"C","subject":"Science","created_at":null,"updated_at":null}<br>
{"id":6,"date":"2017\/4\/1","student_id":5,"grade":"E","subject":"English","created_at":null,"updated_at":null}<br>
{"id":7,"date":"2017\/2\/1","student_id":1,"grade":"D","subject":"Science","created_at":null,"updated_at":null}<br>
{"id":8,"date":"2017\/3\/1","student_id":2,"grade":"A","subject":"English","created_at":null,"updated_at":null}<br>
{"id":9,"date":"2017\/7\/1","student_id":3,"grade":"D","subject":"English","created_at":null,"updated_at":null}<br>
{"id":10,"date":"2017\/8\/1","student_id":4,"grade":"C","subject":"Science","created_at":null,"updated_at":null}

Here is my controller

$englishgrades = StudentHistory::raw('select p1.student_id
    from student_histories p1
    inner join 
    (
      select student_id, max(date) as mdate
      from student_histories
      group by student_id
    )
    p2 on p1.student_id = p2.student_id and p1.date = p2.mdate 
    where p1.subject = "English"
    ')
    ->get();

home.blade.php

Total of {{ $englishgrades->count() }}
                <br><br>

                @foreach ($englishgrades as $englishgrade )
                    {{ $englishgrade  }}<br>
                @endforeach<br><br>

Please also help me remove the other details that it is getting in the blade view.

OldPadawan
  • 1,247
  • 3
  • 16
  • 25
Rodney Zanoria
  • 494
  • 1
  • 4
  • 19

1 Answers1

0

Try this once :-

$englishgrades = DB::select(DB::raw('SELECT  a.*
                    FROM    student_historiess a
                    INNER JOIN
                    (
                        SELECT *, MAX(id) max_ID
                        FROM    student_histories
                        GROUP BY grade
                    ) b ON a.grade = b.grade AND
                        a.id = b.max_ID  
                        having a.subject = "english"'));
 echo "<pre>"; print_r($englishgrades); die;

Hope it helps!

kunal
  • 4,122
  • 12
  • 40
  • 75