Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在MYSQL select中将所有JSON键设置为列名_Php_Mysql_Json - Fatal编程技术网

Php 如何在MYSQL select中将所有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

在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"}
我可以将特定键设置为列名,如

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解码,然后使用数组_键,然后内爆。这个答案有什么问题?