Подсчет серии значений в Laravel - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу получить общее вхождение значений в список. Смотрите необработанные данные: enter image description here

В Laravel посмотрите код, который я написал, но он неправильный, поэтому мне нужна помощь:

public static function ServiceNo($service,$fltno,$type)
{
       $res =  DB::table('tbname')
        ->select(DB::raw('count(distinct(nextSvr)) as svr'))
        ->where(['fltno'=>$fltno,'mtype'=>$type,'serviceType'=>$service])
        ->get(); 
        foreach($res as $r){
          $cnn =  $r->svr;
        }

    return $cnn;

}

Приведенный выше код будет считать только отдельный nextsvr, однако, то, что я хочу, лучше поясняется так: из приведенного выше первые три семерки считаются как 1, следующие три серии равны 1 и т. Д., В конце общее количество для услуги типа А будет 9 услуг. Пожалуйста, мне нужна помощь в этом отношении.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Попробуйте это.

В MySQL это будет:

SET @prev := 0; 
SELECT sum(col) as distinct_count
FROM (
    SELECT *, if(@prev = nextSvr,  0,  1) as col,
    @prev := nextSvr
    FROM tbname
) x

Используя переменную, я думаю, вы можете следить за изменениями между строками и соответственно увеличивать счетчик. Поэтому, если строка изменится, добавьте 1.

Вы можете перевести это на красноречивое и использовать его:

DB::statement(DB::raw('SET @prev := 0'));

$count = DB::select(DB::raw("
    SELECT sum(col) as distinct_count
    FROM (
        SELECT *, if(@prev = nextSvr,  0,  1) as col,
        @prev := nextSvr
        FROM tbname
    ) x
"))
0 голосов
/ 02 ноября 2018

Вы ищете что-то подобное, возможно?

public function countServices(Request $request)
{
   $counter = 0;
   $fltno = '';

   $foo = DB::table('bar')
    ->where([
        ['fltno', '=', $request->fltno],
        ['mType', '=', $request->type],
        ['serviceType', '=', $request->service]
    ])
    ->get();

    foreach( $foo as $bar )
    {
        if( $fltno != $bar->fltno )
        {
            $fltno = $request->fltno;
            $counter++;
        }
    }

    return $counter;
}
0 голосов
/ 01 ноября 2018

Вы должны попробовать приведенный ниже пример

$count = DB::table('tablename')->count(DB::raw('DISTINCT name'));

OR

DB::table('tablename')->distinct('name')->count('name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...