使用 laravel 中的原始表达式获取用户的最新条目
Using raw expression in laravel to get latest entry for user
这是我的 table
我想要的是获得学生的最新英语成绩,而忽略没有成绩的学生。它应该像这样显示:
{"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"}
但是,在我的代码中,这就是我展示的内容
{"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}
这是我的控制器
$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>
还请帮我删除 blade 视图中的其他详细信息。
试试这个:-
$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;
希望对您有所帮助!
这是我的 table
我想要的是获得学生的最新英语成绩,而忽略没有成绩的学生。它应该像这样显示:
{"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"}
但是,在我的代码中,这就是我展示的内容
{"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}
这是我的控制器
$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>
还请帮我删除 blade 视图中的其他详细信息。
试试这个:-
$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;
希望对您有所帮助!