Supongamos que si tengo una mesa de
ID Col1 Col2 Col3 Col4 Col5 1 Hello "" Hi "" "" 2 two "" Hi here "" Quiero obtener el recuento de Col(X) sin incluir la columna vacía. Entonces para el registro 1 debo tener un conteo de 2 y para el registro 2 tengo 3
¿Cómo puedo hacerlo en MySQL o en Eloquent o Query Builder de Laravel? Gracias por adelantado.
Lo que quieres es sumar los campos no vacíos. En MySQL se parece a:
SELECT *, SUM((Col1!='') + (Col2!='') + (Col3!='') + (Col4!='') + (Col5!='')) as NotEmptyFields FROM table GROUP BY ID;En Laravel se parece a:
Model::select(DB::raw('*, SUM((Col1!="") + (Col2!="") + (Col3!="") + (Col4!="") + (Col5!="")) as NotEmptyFields')) ->groupBy('ID') ->get();Pruebe esta solución:
$data = DB::table('MyTable')->get();Obtenga todos los datos de la tabla usando una consulta como esta en laravel. Devuelve una matriz de objetos. Así que itere su matriz usando para cada ciclo y verifique las columnas o esté vacía o no.
Si alguna columna está vacía, no haga nada.
Pero si alguna columna tiene un valor de conteo + 1, agregue en su matriz de resultados.
$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);La respuesta de Muhammad podría volverse muy lenta en grandes conjuntos de datos.
Prueba así.
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' ))Esto ahora debería contar columnas con NULL o cadena vacía en ellas