Mysql Laravel raw select with avg-无法显示提取的数据
我有拉威尔项目,我想获取平均时间。Select语句正确,但无法显示数据,因为出现错误:数组到字符串转换 这是我的代码: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
$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'];