【问题标题】:Count Series of Values in Laravel在 Laravel 中计算一系列值
【发布时间】:2018-11-02 12:16:41
【问题描述】:

我想获取列表中值的总出现次数。查看原始数据:

在 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,但是,我想要更好地解释如下:从上面看,前三个7被计为1,接下来的三个系列是1,等等,最后服务类型 A 的总数将是 9 个服务。拜托,我需要这方面的帮助。

【问题讨论】:

  • 我明白你的意思,但是数据库语言应该如何区分 1 和 1?您的表中没有其他可以提供帮助的字段吗?
  • @MattJameson:谢谢看看数据库的报告,我想要的是:如果我像这样手动计数,我看到的第一个系列是 7 计为 1,下一个系列是 9,即 1,然后是 1,计为 1,依此类推。最后,一切都将总结为 9。如果这是手动的,那么可以编写代码来解决这个问题。我在做什么错我现在的代码。
  • 序列总是在 3 中吗?
  • 不,有时可能是 4 个,甚至 10 个
  • 如果我对数据进行排序或以不同的顺序插入会发生什么。您不能依赖插入顺序。如果您要批量创建它们,请添加一个批次 ID,您可以在每个新批次上递增该 ID。没有问题,因为您可以按批次 ID 分组计数。计算这一点的唯一方法是从表中提取每条记录,并在数据从 7 变为其他值时使用开关手动计算它们,这只是性能方面的糟糕,而不是计算所有可能出错的地方。如果他们是按天添加一个日期字段和组。

标签: php laravel


【解决方案1】:

你应该试试下面的例子

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

DB::table('tablename')->distinct('name')->count('name');

【讨论】:

  • 。我要计算的是不同的但不是完全不同的,因为这将返回 6 而不是 9。这意味着第 1-3 行 = 1,第 4-6 行 = 1,第 7 行-9= 1 个等
【解决方案2】:

试试这个。

在 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
"))

【讨论】:

  • 我不明白你的代码。你能把它翻译成雄辩的吗
  • 未知列。
  • 调用数组上的成员函数get()
【解决方案3】:

您是否正在寻找类似的东西?

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;
}

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 2013-03-04
    • 2017-04-13
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2019-05-15
    • 2015-04-05
    • 2023-03-20
    相关资源
    最近更新 更多