php - 如何构建 mySQL 函数来访问 K2 extra_fields

标签 php mysql json function joomla-k2

我需要一个接受 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/

相关文章:

javascript - 如何使用复杂的数据结构来填充 JavaScript 和 jQuery 中的 div 或表格

php - MYSQL IN 语句语法不起作用

php - Laravel 验证存在于不存在的地方

mysql - 如何使用带有行号的mysql分区按类型返回项目

javascript - 将 JSON 存储在 HTMl 中

javascript - Angular2 等待 JSON 文件加载

php - 基于MySQL表通过PHP创建一条空白记录

php - 更改 URL 后无法访问网站并且无法访问 Wp-admin

mysql - 可以比较 MySQL 上多行的 COUNT(*) 吗?

python - 如果持有数据库连接的线程死亡,数据库连接是否会返回池?