我需要一个接受 4 个参数的函数,以便使用 K2 extra_fields
进行一些计算,并将结果返回到 SELECT
语句中。
我需要函数来计算两点之间的距离。第一个点的坐标可在项目的 extra_fields
中找到。第二个点的坐标将在 php 脚本中手动给出。
我的extra_fields
包含:
[{"id":"1","value":"40.111"},{"id":"2","value":"20.222"}]
其中 id[1] 和 id[2] 是坐标(纬度和经度)。
SELECT 语句应如下所示:
SELECT id, title, **FUNCTION_GOES_HERE** AS 'distance'
FROM k2_items;
我不是在寻找距离计算算法。问题是如何从 extra_fields
字段中提取坐标。
有什么想法吗?
最佳答案
因为您无法更改表格设计,所以您必须进行一些繁琐的字符串解析。这是一个例子:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -2), '"', 1) as latitude,
SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -1), '"', 1) as longitude
FROM k2_items;
<强> DEMO
说明:
我们在这些值中找到了两次子字符串“value”:”:
[{"id":"1","value":"40.111"},{"id":"2","value":"20.222"}]
^ first time ^ second time
SUBSTRING_INDEX(extra_fields, '"value":"', -2
将为我们提供示例数据,从我们的针的倒数第二次出现之后开始的子字符串,这里是第一次出现:
40.111"},{"id":"2","value":"20.222"}]
对于纬度,我们需要子字符串直到下一个双引号。这是一个简单的:SUBSTRING_INDEX(haystack,needle,1)
,其中第一个表达式为 haystack,双引号为needle。
SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -2), '"', 1)
给了我们想要的结果:
40.111
通过相同的逻辑,我们将获得经度。
关于php - 如何构建 mySQL 函数来访问 K2 extra_fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721965/