当几个数值列属于一组,而您想把它们作为一个值来查询时,请使用
vsql_cube。一串 AND 条件可以测试某一行是否落在某个范围内,但不能
按距离对行排序。cube 类型两者都能做到。它是 PostgreSQL cube 扩展的
移植版本。大多数 PostgreSQL 函数名得以保留;cube() 构造函数、运算符
及其支持函数(cube_contained、cube_overlap、distance_taxicab、
distance_chebyshev)变成了下面的具名函数。
如果您使用安装脚本、Docker 镜像或发行版压缩包安装了 VillageSQL,
vsql_cube.veb 已经位于服务器的 lib/veb/ 目录中。
用一条语句将它安装到服务器中:
确认它已存在:
要自行构建,请按照存储库中的
构建说明进行操作。
新增内容
cube 类型
将列声明为 `cube`(N),其中 N 是一个值可以拥有的最大维数,从 1 到 100。
cube 是 MySQL 的保留字,因此需要反引号,并且维数是必需的。
以坐标字符串写入值。列会解析它:
找出离目标读数最近的两个传感器,再找出某个区域内的传感器:
cube 参数从列获取维数,因此当某个 cube 参数是列值,或是保留列维数
的函数(例如 cube_union 或 cube_enlarge)的结果时,调用才能成功。
没有这类参数的调用,例如 cube_dim(cube_point_nd(1, 2)),会失败并报
ERROR 3219 (HY000): Cannot initialize function 'cube_dim': cannot determine type parameters for vsql_cube.cube in argument 1。出于同样的原因,
插入时请使用普通坐标字符串,而不要用 cube_point_nd() 包装。cube_point_nd、cube_box_nd、cube_subset 和 cube_add_dim 的每个
坐标参数也可以是逗号分隔的字符串,各列表首尾相接。因此
cube_point_nd('1,2,3') 和 cube_point_nd(1, 2, 3) 构建同一个点。
当坐标存放在列中时请传入字符串,这是单独参数无法表达的唯一情况。
另请参阅