Mysql Laravel raw select with avg-无法显示提取的数据

Mysql Laravel raw select with avg-无法显示提取的数据,mysql,laravel,Mysql,Laravel,我有拉威尔项目,我想获取平均时间。Select语句正确,但无法显示数据,因为出现错误:数组到字符串转换 这是我的代码: $limit = (int)$this->argument('distance'); $avgTimeBetweenBlocks = DB::select('SELECT AVG(b.timediff) FROM ( SELECT a.created_at, a.cr

我有拉威尔项目,我想获取平均时间。Select语句正确,但无法显示数据,因为出现错误:数组到字符串转换 这是我的代码:

        $limit = (int)$this->argument('distance');

        $avgTimeBetweenBlocks = DB::select('SELECT AVG(b.timediff)
            FROM
            (
            SELECT a.created_at, a.created_at_end, AVG(TIME_TO_SEC(TIMEDIFF(a.created_at, a.created_at_end))) AS timediff
            FROM
            (
            SELECT created_at,
                (
                    SELECT max( created_at)
                    FROM block_differences bd1 
                    WHERE bd1.created_at < bd.created_at
                ) as created_at_end

            FROM block_differences bd
            limit :limit
            ) a
            WHERE a.created_at_end is not null
            GROUP BY a.created_at, a.created_at_end
                ) b', ['limit' => $limit] )->get();

        echo json_decode(json_encode($avgTimeBetweenBlocks[0]), true);
        $this->info("avgTimeBetweenBlocks {$avgTimeBetweenBlocks[0]} seconds");
我尝试以不同的方式显示值,但每次都得到相同的结果。

您尝试在此处回显数组,json_decode将其转换为数组,因此回显无法工作。使用打印而不是回显

编辑:-数组[AVGb.timediff]=>139.38775510

您必须更改您的查询。检查这里,我给你一个例子如下

    $avgTimeBetweenBlocks = DB::select('SELECT AVG(b.timediff) as avgtimediff
                FROM
                (
                SELECT a.created_at, a.created_at_end, AVG(TIME_TO_SEC(TIMEDIFF(a.created_at, a.created_at_end))) AS timediff
                FROM
                (
                SELECT created_at,
                    (
                        SELECT max( created_at)
                        FROM block_differences bd1 
                        WHERE bd1.created_at < bd.created_at
                    ) as created_at_end

                FROM block_differences bd
                limit :limit
                ) a
                WHERE a.created_at_end is not null
                GROUP BY a.created_at, a.created_at_end
                    ) b', ['limit' => $limit] )->get();

$response = json_decode(json_encode($avgTimeBetweenBlocks[0]), true);
echo $response['avgtimediff'];

你在哪一行得到这个错误?为什么json编码直接在解码中如此复杂?好的,谢谢。但是现在我有了这样的东西:Array[AVGb.timediff]=>139.38775510如何读取这个数字?很高兴帮助happy编码
    $avgTimeBetweenBlocks = DB::select('SELECT AVG(b.timediff) as avgtimediff
                FROM
                (
                SELECT a.created_at, a.created_at_end, AVG(TIME_TO_SEC(TIMEDIFF(a.created_at, a.created_at_end))) AS timediff
                FROM
                (
                SELECT created_at,
                    (
                        SELECT max( created_at)
                        FROM block_differences bd1 
                        WHERE bd1.created_at < bd.created_at
                    ) as created_at_end

                FROM block_differences bd
                limit :limit
                ) a
                WHERE a.created_at_end is not null
                GROUP BY a.created_at, a.created_at_end
                    ) b', ['limit' => $limit] )->get();

$response = json_decode(json_encode($avgTimeBetweenBlocks[0]), true);
echo $response['avgtimediff'];