这可能很容易,但不知道如何。
我有一个表可以具有特定非键列字段的重复值。如何使用查询生成器或Eloquent编写SQL查询,该查询将获取具有该列的不同值的行?
请注意,我不是仅提取该列,而是与其他列值一起使用,因此distinct()
可能无法正常工作。所以这个问题基本上可以是如何指定我想在查询中区分的列,因为distinct()
不接受任何参数?
你应该使用groupby
。在Query Builder中,您可以这样做:
$users = DB::table('users')
->select('id','name', 'email')
->groupBy('name')
->get();
在Eloquent中你也可以像这样查询:
$users = User::select('name')->distinct()->get();
在雄辩中你可以使用它
$users = User::select('name')->groupBy('name')->get()->toArray() ;
groupBy实际上是获取不同的值,实际上groupBy会对相同的值进行分类,以便我们可以对它们使用聚合函数。但在这种情况下,我们没有聚合函数,我们只是选择将导致结果具有不同值的值
虽然我迟到了回答这个问题,但使用Eloquent获取不同记录的更好方法是
$user_names = User::distinct()->get(['name']);
请注意,上面使用的groupBy
不适用于postgres。
使用distinct
可能是一个更好的选择 - 例如
$users = User::query()->distinct()->get();
如果您使用query
,您可以根据要求选择所有列。
如果数据库规则不允许任何选择字段在聚合函数之外,则分组将不起作用。而是使用laravel collections。
$users = DB::table('users')
->select('id','name', 'email')
->get();
foreach($users->unique('name') as $user){
//....
}
qazxsw poi检索表中不同行的所有三列。您可以根据需要添加任意数量的列。