【问题标题】:How to extract all rows which is duplicates in laravel?如何提取laravel中重复的所有行?
【发布时间】:2017-12-29 01:45:15
【问题描述】:

我想从 Users Table

中获取所有具有相同名称和位置的行
**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

我想获得 all rows

相同的名称和位置
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

您的任何帮助或建议将不胜感激。

【问题讨论】:

    标签: php sql database laravel laravel-5


    【解决方案1】:

    使用havingRaw:

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

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

    【讨论】:

      【解决方案2】:

      要获得所有行而不是一组重复行的总数,如下所示;

      $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')->haveRaw('COUNT() > 1');})->get();但得到这个:'dbtable.categories.id'不在 GROUP BY 中(SQL:select idslug from categories where id in(select id from categories group by @987654328 @ 有 COUNT() > 1))
      猜你喜欢
      • 2015-02-18
      • 2013-01-07
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2011-07-12
      • 2013-07-06
      相关资源
      最近更新 更多