【问题标题】:array values with where condition in laravel querylaravel查询中具有where条件的数组值
【发布时间】:2018-04-27 02:29:52
【问题描述】:

我有一个名为assetIDs 的数组,如下所示

$assetIDs = Collection {#505 ▼
  #items: array:2 [▼
    0 => 4
    1 => 7
  ]
}

我有如下表中的数据

我正在使用这个对上表进行查询

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)->pluck('supplier_id');

上述查询的结果如下

Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
    2 => 2
  ]
}

这里whereIn 正在返回满足条件的所有可能行。实际上我需要得到结果,就像supplier_id 具有assetIDs 数组的值一样。在我的表中supplier_id=1 具有47 这两个值就像下面的集合一样。

Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
  ]
}

有人可以建议我解决这个问题吗?

【问题讨论】:

  • 我在 mysql 中有答案,但我不知道 laravel,您正在混合 2 个查询:-首先您要获取哪个供应商 ID 具有 2 个不同的值-其次是您想要展示它
  • @Jean Doux:好的,你能帮我查询一下mysql吗?

标签: php mysql arrays laravel-5.3 laravel-query-builder


【解决方案1】:

你可以试试:

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)
               ->groupBy('supplier_id')
               ->havingRaw('count(distinct asset_id) = ' . count($assetIDs))
               ->pluck('supplier_id');

【讨论】:

  • 我已经尝试过了。它排除了重复的值。
  • 没有 goupBy 它只返回一个supplier_id。在您的情况下,它没有区别,但如果您有大量数据,则会出错。
【解决方案2】:

这是你应该做的mysql:

1-获取所有超过1个supplier_id的id:

SELECT supplier_id, Count(distinct asset_id) as dist_asst
 FROM Table
 GROUP BY supplier_id
 HAVING dist_asst > 1

2- 然后进行连接:

SELECT t1.supplier_id
FROM Table t1
INNER JOIN (SELECT supplier_id, Count(distinct asset_id) as dist_asst
     FROM Table
     GROUP BY supplier_id
     HAVING dist_asst > 1) t2 on t2.supplier_id = t1.supplier_id

【讨论】:

  • 让我检查这两个查询
  • 您的查询正在返回所有供应商 ID,但此查询对我有用 SELECT supplier_id FROM supplier_assets WHERE asset_id IN ('4', '7') GROUP BY supplier_id HAVING COUNT(*) = 但是当我将其转换为 laravel 时,它返回 null :(
  • 第一次查询的结果是什么?
猜你喜欢
  • 2021-09-18
  • 2014-10-04
  • 2020-08-15
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多