首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据其他表的结果导入到mysql中

根据其他表的结果导入到mysql中
EN

Stack Overflow用户
提问于 2018-07-17 03:57:09
回答 1查看 32关注 0票数 0

我希望将JSON数据导入到一个表中,但我只想根据另一个表中的内容来获取字段。

下面是我的示例数据库:

代码语言:javascript
复制
CREATE TABLE `fields` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fieldname` varchar(50) DEFAULT NULL,
`encompassid` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `fields` (`id`, `fieldname`, `fileid`)
VALUES
(1,'streetaddress','11'),
(2,'city','12');

因此,基于该映射(即街道地址是字段11),我希望能够解析POSTed JSON并获取这些字段,然后将它们插入到不同的表中。

代码语言:javascript
复制
CREATE TABLE `testfile` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`streetname` varchar(100) DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4;

目前,我的代码返回正确的查询,除了变量没有来自JSON的数据,它们只是一个字符串。

代码语言:javascript
复制
$con=mysqli_connect($dbhost,$dbuser,$dbpassword,$db);
$result = mysqli_query($con,"SELECT * FROM fields");
while($row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    $items = array();
    $itemsV = array();
        $sfv = '';
    foreach ($data as $obj1) {
        if($sfv != "\$".$obj1['fieldname']." = \$obj2->{'".$obj1['fileid']."'};"){
            $sfv .= "\$".$obj1['fieldname']." = \$obj2->{'".$obj1['fileid']."'};";
        }

        $items[] .= $obj1['fieldname'];
        $itemsV[] .= "\$".$obj1['fieldname'];
    }

}


$string = file_get_contents('php://input');
$data2 = json_decode($string);
foreach ($data2 as $obj2) {

        $values  = implode(',', $itemsV);

        eval("\$sfv;");

        $columns = implode(", ",$items);

        $insert = "REPLACE INTO testfile ($columns) VALUES ($values);";

        echo $insert;

}

以下是示例JSON:

代码语言:javascript
复制
{
"serializedExport": null,
"format": 1,
"fields": {
    "2": "100000",
    "3": "4.500",
    "4": "360",
    "5": "760.03",
    "6": "",
    "8": "",
    "9": "",
    "10": "",
    "11": "123 HOPE STREET",
    "12": "Philadelphia",
    "13": "",
    "14": "PA",
    "15": "19119",
    "16": "1",
    "17": ""
 }
}

当前的输出如下所示:我期望使用REPLACE INTO fields_testloan (streetaddress, city) VALUES ('123 HOPE STREET','Philadelphia');的地方是REPLACE INTO fields_testloan (streetaddress, city) VALUES ($streetaddress,$city);

这有可能做到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 04:14:50

在读取fields表时,创建一个从字段ID映射到变量名的关联数组。

代码语言:javascript
复制
$fields = array();
while ($row = mysqli_fetch_assoc($result)) {
    $fields[$row['fileid']] = $row['fieldname'];
}

然后,在处理JSON时,创建字段名和值的数组。对json_decode()使用第二个参数,这样就可以得到一个关联数组而不是对象,这样就可以用foreach循环遍历它。

代码语言:javascript
复制
$string = file_get_contenst("php://input");
$data2 = json_decode($string, true);

$colnames = array();
$colvalues = array();
foreach ($data["fields"] as $fieldid => $fieldvalue) {
    if (isset($fields[$fieldid])) {
        $colnames[] = $fields[$fieldid];
        $colvalues[] = "'" . mysqli_real_escape_string($con, $fieldvalue) . "'";
    }
}

$cols_string = implode(",", $colnames);
$vals_string = implode(",", $colvalues);
$sql = "REPLACE INTO testfile ($cols_string) VALUES ($vals_string)";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51369247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档