Laravel 获取符合条件的列行数
Laravel get count of column rows with condition
假设我有 table 个
ID Col1 Col2 Col3 Col4 Col5
1 Hello "" Hi "" ""
2 two "" Hi here ""
我想获取 Col(X) 的计数而不包括空列。所以对于记录 1,我必须有 2
的计数,对于记录 2,我有 3
如何在 MySQL 或 Laravel 的 Eloquent 或查询生成器中执行此操作?提前致谢。
试试这个解决方案:
$data = DB::table('MyTable')->get();
在 laravel 中使用类似这样的查询从 table 获取所有数据。它是 return 对象数组。因此,使用 for each 循环迭代您的数组,并检查列是否为空。
如果任何列为空,则什么也不做。
但是如果任何列的值 count+1 添加到您的结果数组中。
$result = [];
foreach($data as $object)
{
$result[$object->id] = 0;
foreach($object as $key => $value)
{
if(!empty($value))
{
if($key != 'id')
{
$result[$object->id] = $result[$object->id] + 1;
}
}
}
}
var_dump($result);
Muhammad 的回答在大数据集上可能会变得非常慢。
这样试试。
DB::table('model')
->select(DB::raw('
(is_null(Col1) OR Col1 = '') +
(is_null(Col2) OR Col2 = '') +
(is_null(Col3) OR Col3 = '') +
(is_null(Col4) OR Col4 = '') +
(is_null(Col5) OR Col5 = '')
as NumberofNulls'
))
现在应该计算其中包含 NULL 或空字符串的列
您想要的是对非空字段求和。在 MySQL 中它看起来像:
SELECT *, SUM((Col1!='') + (Col2!='') + (Col3!='') + (Col4!='') + (Col5!='')) as NotEmptyFields
FROM table
GROUP BY ID;
在 Laravel 中看起来像:
Model::select(DB::raw('*, SUM((Col1!="") + (Col2!="") + (Col3!="") + (Col4!="") + (Col5!="")) as NotEmptyFields'))
->groupBy('ID')
->get();