laravel通过列值获取唯一结果过滤器

时间:2018-08-02 11:28:05

标签: laravel

我有一个用户表,其中有列Membership Id。我需要获取Membership Id列没有重复值的行。例如,这是我的表结构

ID   Name  Membership Id 
1    xxx   123
2    xxx   124
3    xxx   124 
4    xxx   125 

在输出中,我想跳过具有会员ID重复值的行,并且只想获取最后一行,因此输出应为上例中的1,3,4行

3 个答案:

答案 0 :(得分:1)

使用子查询JOIN:

$join = User::select('membership_id', DB::raw('max(id) id'))
    ->groupBy('membership_id');
$sql = '(' . $join->toSql() . ') as latest';
$users = User::join(DB::raw($sql), function($join) {
    $join->on('users.membership_id', 'latest.membership_id')
        ->on('users.id', 'latest.id');
})->get();

在Laravel 5.6.17中,您可以使用joinSub()

$join = User::select('membership_id', DB::raw('max(id) id'))
    ->groupBy('membership_id');
$users = User::joinSub($join, 'latest', function($join) {
    $join->on('users.membership_id', 'latest.membership_id')
        ->on('users.id', 'latest.id');
})->get();

答案 1 :(得分:0)

足够

MyModel::distinct()->get(['column_name']);

为您

User::distinct()->get(['Membership Id']);

并且您必须更改t

答案 2 :(得分:0)

很有口才

User::select('Membership_Id')->distinct()->get();

Vie数据库外观

DB::table('users')->select('Membership_Id')->distinct()->get();