【问题标题】:laravel query builder whereIn get duplicate datalaravel 查询生成器 whereIn 获取重复数据
【发布时间】:2018-11-07 11:57:11
【问题描述】:

我目前正在尝试获取我拥有的候选名称列表的候选 ID,为此我目前正在使用以下查询,

foreach ($candidateName as $index => $row) {
    $candidateIDS = DB::table('candidates')
                   ->select('id', 'account_name')
                   ->whereIn('account_name', $candidateName)
                   ->get();
}

上述查询查找我通过candidateName 数组发送的候选名称,并按预期输出数据。

我的问题是如何通过查询获取重复数据。因为candidateName 数组有重复的名称记录,我需要查询输出具有与candidateName 数组一样的重复候选ID 和名称。

样本candidateName数组

$candidateName = [name1,name2,name3,name3,name4,name5]

预期输出

$candidateIDS = [{id:1,account_name:"name1"},
                 {id:2,account_name:"name2"},
                 {id:3,account_name:"name3"},
                 {id:3,account_name:"name3"},
                 {id:4,account_name:"name4"},
                 {id:5,account_name:"name5"},];

【问题讨论】:

  • 放置带有样本数据和预期输出的表格。这样你的问题就会更容易理解。
  • @WebArtisan 我添加了示例数据和预期输出
  • @JonasStaudenmeir 该方法在处理 100 条或更多记录时是否有效,您是否知道任何基于 laravel 的方法
  • 是的,它适用于许多记录。你的意思是实现这种方法的 Laravel 方法吗?还是另一种方法?

标签: laravel-5 laravel-query-builder where-in


【解决方案1】:

Return all for where IN (1,2,3,3,3,1) clause with duplicates in the IN condition 的 Laravel 实现:

DB::table('candidates')
    ->select('candidates.id', 'candidates.account_name')
    ->joinSub(function($query) use($candidateNames) {
        foreach($candidateNames as $i => $candidateName) {
            if($i == 0) {
                $query->selectRaw('? as account_name', [$candidateName]);
            } else {
                $query->unionAll(DB::query()->selectRaw('? as account_name', [$candidateName]));
            }
        }
    }, 'where_in', 'where_in.account_name', 'candidates.account_name')
    ->get();

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2018-06-26
    • 2017-08-13
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多