我有一个工具,用户可以在其中输入一些搜索值,并将该值存储在另一个表中,以便进行日志记录。现在,我想显示该用户的最后5个搜索结果。
保存搜索后,我使用以下函数查询它:
public function scopeGetUserSearch($query)
{
return $query->select('searchValue')
->where('userID', '=', Auth::user()->id)
->orderBy('created_at', 'desc')
->distinct()
->take(5);
}我需要区分值,因为用户可以搜索同一词多次。(例如,如果用户搜索术语"Playstation 4“4次,需要显示一次)
然后我在刀片上显示结果:
@foreach($bsUserSearch as $b)
<div id="brand_box" class="border left" style="min-width: 30px;cursor:pointer;text-align:center;" onclick="$('#company').val('{{$b->searchValue}}');">{{$b->searchValue}}</div>
@endforeach问题是当用户再次搜索"Playstation 4“时,即使created_at字段是最新的,它也不会首先显示。或者,如果5个地方已经有人居住,术语"Playstation 4“将完全不显示。
所以,如果我有这些搜索结果:
如果用户再次搜索"PlayStation 4",我需要将其放在列表的首位。如下所示:
发布于 2017-05-11 14:18:52
基于this answer,我得到了这个解决方案
public function scopeGetUserSearch($query)
{
return $query->select('searchValue', \DB::raw('max(created_at)'))
->where('userID', '=', Auth::user()->id)
->groupBy('searchValue')
->orderBy(\DB::raw('max(created_at), searchValue'), 'desc')
->take(5);
}https://stackoverflow.com/questions/43917027
复制相似问题