Php 如何在MYSQL select中将所有JSON键设置为列名
在mysql表中,其中一列是json,我想选择json字段并设置为列名 类3的Json字段值Php 如何在MYSQL select中将所有JSON键设置为列名,php,mysql,json,Php,Mysql,Json,在mysql表中,其中一列是json,我想选择json字段并设置为列名 类3的Json字段值 {"name": "xyz 1", "email": "xyz1@example.com"} {"name": "xyz 2", "email": "xyz2@example.com"} 第四类 {"first_name": "abc1", "last_name": "pqr1"} {"first_name": "abc2", "email": "pqr2"} 我可以将特定键设置为列名,如 sele
{"name": "xyz 1", "email": "xyz1@example.com"}
{"name": "xyz 2", "email": "xyz2@example.com"}
第四类
{"first_name": "abc1", "last_name": "pqr1"}
{"first_name": "abc2", "email": "pqr2"}
我可以将特定键设置为列名,如
select json_extract(my_tags,'$.name') as name from {table_name} where class = 3;
但我希望所有键值都作为select结果中的列名。每次的键值都会不同
根据以上示例,结果列应如下所示
姓名、电子邮件
select {my_tags} as name from {table_name} where class = 4;
但是对于类4,需要的列名应该是名和姓您可以编写如下查询:
select
json_extract(my_tags,'$.name') as name
json_extract(my_tags,'$.email') as email
from table_name;
因此,您的结果将是:
name email
xyz xyz@example.com
您不能直接在MySQL中实现这一点。您可以在MySQL和PHP的组合中执行类似的操作。查询:
SELECT JSON_KEYS(my_tags) AS tags, JSON_EXTRACT(my_tags, '$.*') AS values FROM {table_name}
然后在PHP中:
while ($row = $result->fetch()) {
$tags = json_decode($row['tags']);
$values = json_decode($row['values']);
$data = array_combine($tags, $values);
// process
}
这将为您提供一个关联数组,该数组与您从建议的单独列查询中获得的数组相同。您可以
array\u将
$数据合并到$行中,如果这样做可以简化处理。是的,但此键将更改它,有时不是静态的,它将是年龄和名称。如果json中没有名称,那么我猜它的名称将显示为null。对于age,您可以添加相同的like name和email。您可以使用PHP数组函数获取列中的所有键,首先转换JSON解码,然后使用数组_键,然后内爆。这个答案有什么问题?