#php #mysql #laravel #eloquent #laravel-query-builder
Вопрос:
Предположим, если у меня есть таблица
ID Col1 Col2 Col3 Col4 Col5
1 Hello "" Hi "" ""
2 two "" Hi here ""
Я хочу получить количество Col(X), не включая пустой столбец. Поэтому для записи 1 у меня должно быть количество 2
, а для записи 2 у меня есть 3
Как я могу это сделать в MySQL или в «Красноречивом» или «Построителе запросов» Laravel? Заранее спасибо.
Ответ №1:
То, что вы хотите, — это суммировать не пустые поля. В 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();
Ответ №2:
Ответ может стать очень медленным для больших наборов данных.
Попробуй вот так.
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'
))
Теперь это должно подсчитывать столбцы с нулевой или пустой строкой в них
Комментарии:
1.
is_null
считает ли пустые строки? так как моя таблица не может быть аннулирована. когда пусто. он остается пустым, а не пустым2. нет, дай мне посмотреть, смогу ли я это отредактировать
3. Хорошо, попробую ваше решение, сэр
Ответ №3:
Попробуйте это решение:
$data = DB::table('MyTable')->get();
Получите все данные из таблицы, используя запрос, подобный этому, в laravel. Он возвращает массив объектов. Поэтому повторите свой массив, используя для каждого цикла, и проверьте столбцы или пустые, или нет.
Если какой-либо столбец пуст, ничего не делайте.
Но если какой-либо столбец имеет значение 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);
Комментарии:
1. можете ли вы объяснить свой ответ ?
2. да, конечно, проверьте мой обновленный ответ
3. я. пробовал, но я не понимаю полученных результатов
4. результат похож на этот массив ( [1] => 2 [2] =>> 3 ) идентификатор 1, имеющий 2 отсчета, и идентификатор 2, имеющий 3 отсчета.
5. кажется запутанным.