如何在Laravel中提取所有重复的行?

12
我想要获取 用户表 中,所有姓名和位置相同的行。
**id** |name        |location    |phone_number

1      |John        | Europe     |0988884434

2      |john        | Europe        |0933333333

3      |Michael     |Europe      |0888888888

4      |Smith       |Dubai       |082388888888

5      |Smith       |Dubai      | 03939494944

我想获取与相同名称和位置所有行

john  |Europe

john  |Europe

Smith |Dubai

Smith |Dubai

以下是我尝试的方法

$duplicates = DB::table('users')
->select('name','location', DB::raw('COUNT(*) as `count`'))
->groupBy('name', 'location')
->having('count', '>', 1)
->get();

但这只显示了重复的一行

john |Europe
Smith|Dubai

任何帮助或建议都将不胜感激。
2个回答

25

使用 havingRaw

$duplicates = DB::table('users')
->select('name','location', DB::raw('COUNT(*) as `count`'))
->groupBy('name', 'location')
->havingRaw('COUNT(*) > 1')
->get();

我也不确定语法,但是Laravel文档似乎暗示在select子句中定义的别名在正常的having()函数中不可用。


3
为了获取所有行而不是一组重复行的总数,代码如下所示:

SELECT * FROM table_name;

$duplicates = DB::table('users')
->select('id', 'name', 'location')
->whereIn('id', function ($q){
            $q->select('id')
            ->from('users')
            ->groupBy('name', 'location')
            ->havingRaw('COUNT(*) > 1');
})->get();

我尝试了DB :: table('categories') - > select('id','slug') - > whereIn('id',function($ q){$ q- > select('id')- > from('categories')- > groupBy('slug')- > havingRaw('COUNT()> 1');})- > get();但是得到了这个:'dbtable.categories.id'不在GROUP BY中(SQL:select idslug from categories where id in(select id from categories group by slug having COUNT()> 1)) - Vit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接