2016-02-10 3 views
0

Я храню урок отсутствия студентов в базе данных с разделителями запятой.Регулярное выражение для ученой уценки отсутствие студентов

Я использую запятую как регулярное выражение для подсчета количества уроков ученика.

вот как я это делаю.

@foreach($students as $student) 

    {{(preg_match_all('/[^,]+/',DB::table('discontinuities') 
->where('student_id', $student->id) 
->where('type2','absent')->pluck('type2Lesson'))) }} 
    Lessons student was absent. 
@endforeach 

но проблема студент может отсутствовать несколько дней, что означает несколько строк сохраняются в разрывах таблицы этот запрос показывает только первое значение возвращается. но мне нужно суммировать общие ценности, чтобы вернуться, как много уроков студент отсутствовали

это пример отсутствующих занятий студентом

enter image description here

и это запрос результатов

enter image description here

Редакция:

Если я ввести 2 отсутствие первого, а затем 1 отсутствие

enter image description here

то результат

enter image description here

+0

Что вы пытаетесь сделать с этим регулярным выражением, подсчитайте количество запятых в поле 'type2Lesson'? – Jeff

+0

Откуда вы знаете, какой результат принадлежит учащемуся? Вы должны хотя бы вывести имя или идентификатор студента или что-то еще, чтобы убедиться, что вы смотрите на то, что, по вашему мнению, вы смотрите. – trincot

+0

@Jeff yes Я подсчитываю количество разделенных запятыми значений, но в нескольких строках. –

ответ

1
@foreach($students as $student) 

<?php $absences = DB::table('discontinuities') 
    ->select('type2Lesson') 
    ->where('student_id', $student->id) 
    ->where('type2','absent')) 
    ->get(); 

    $count = 0; 

    foreach($absences as $absence){ 
     $count += count(explode(',', $absence->type2Lesson)); 
    } 
?> 

    {{$count}} lessons student was absent. 
@endforeach 

Это должно работать. Не рекомендуется хранить данные в формате json или CSV в базе данных, потому что у вас возникли проблемы с записью запросов, чтобы делать то, что вы хотите. Было бы лучше иметь, например, базу данных каждого класса, в которую должен был участвовать студент, и логическое значение для отсутствующего или нет. Тогда вы могли просто посчитать отсутствие.

+0

это действительно работаю спасибо! –

0

Вам необходимо выполнить запрос, который будет группировать записи отсутствия для данного учащегося вместе. Я бы даже позволил запросу подсчитать дни отсутствия. Это может посчитать запятые, а затем сделать стандартную ->sum() над этим значением:

@foreach($students as $student) 

    {{ 
    DB::table('discontinuities') 
    ->where('student_id', $student->id) 
    ->where('type2','absent') 
    ->sum(DB::raw("LENGTH(type2Lesson) - LENGTH(REPLACE(type2Lesson, ',', ''))+1") 
    }} 
    Lessons student was absent. 
@endforeach 

Запроса нуждается в DB :: сырец() вызова для вычисления числа запятой. Синтаксис этого выражения зависит от базы данных. Вышеупомянутые работы для MySql, но для другой базы данных вам нужно использовать LEN вместо LENGTH.

Смежные вопросы