【问题标题】:How to explode and find average of XYZ coordinates如何爆炸并找到 XYZ 坐标的平均值
【发布时间】:2014-03-26 21:03:24
【问题描述】:

我在一个表中有一个列XYZ,其中存储了(x,y,z) 坐标。我想找到该列的平均值。 当我尝试以下 SQL 时,

SELECT AVG(xyz) FROM table1

它只给了我x -coordinate 的平均值。我正在尝试在php 代码中使用结果。

所以我也试过了

$xyz = mysql_query("SELECT xyz FROM  `notes_two` where id=".$id);
list($leftx,$topy,$zindexz) = explode('x',$xyz);

但是我还是不知道如何求xyz列的所有行的平均值

这是我的table

【问题讨论】:

  • 您认为xyz 行的平均值是多少? xyz 列是 varchar
  • 当然CAST 没有帮助。你会把它投射到什么地方?诠释?那会给你1个整数。考虑到您有 3 个整数 (x,y,z),您需要首先计算所有这些位置的中心。然后取所有这些中心的平均值。棘手的数学:)
  • 根本不可能吗?

标签: php mysql sql explode


【解决方案1】:

通过查询,您可以这样做

Select SUBSTRING_INDEX(xyz,'x',1) as x ,
SUBSTRING_INDEX(SUBSTRING_INDEX(xyz,'x',-2),'x',1) as y ,
SUBSTRING_INDEX(xyz,'x',-1) as z from table1

查看演示http://sqlfiddle.com/#!2/62208/10

然后使用常规 PHP 你可以得到每一行的平均值。

或者直接使用查询,您可以这样做

Select 
AVG(x) as AVG_X,
AVG(Y) as AVG_Y,
AVG(z) as AVG_Z
from
(
  select
  SUBSTRING_INDEX(xyz,'x',1) as x ,
  SUBSTRING_INDEX(SUBSTRING_INDEX(xyz,'x',-2),'x',1) as y ,
  SUBSTRING_INDEX(xyz,'x',-1) as z from table1
 )t1

在这里查看演示http://sqlfiddle.com/#!2/62208/11

【讨论】:

  • 如何将这 3 个平均值存储到 php 变量中?用while循环?
  • 是的,您可以执行查询并获取它们并存储在 PHP 变量中。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多