如何在MySql中更新Json数据类型?

时间:2017-02-25 07:47:24

标签: php jquery mysql sql json

我的表中的列是Json数据类型。 在本专栏中,我记录了这样的电话数据:

{"0": "044-33565388", "1": "044-33565399", "2": "044-33565311"}

对于此表单的商店数据,我使用textarea并在新行中输入每个电话号码。接下来将数据传递给php文档,解析数据如下:

$phoneList = json_encode( explode("\r\n", $input), JSON_FORCE_OBJECT)

并在mysql中插入数据。现在我想更新或删除一些JSON数据。我尝试这样的事情,但得到了错误:

查询:

UPDATE `sellers` SET `seller_phone` = JSON_SET(`seller_phone`, {"0":"33565388","1":"33565399"}) WHERE `seller_id` = 8

错误:

您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在'" 0":" 33565388"," 1":&#附近使用正确的语法34; 33565399"," 2":" 33565311"})WHERE seller_id = 8'第1行

MySql版本:5.7.9

现在,我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

您可以使用JSON_SET进行更新,并使用JSON_REMOVE进行未设置的密钥。

使用以下查询进行更新-

UPDATE `sellers` SET `seller_phone` = JSON_SET(`seller_phone`, "$.0", "33565388", "$.1", "33565399") WHERE `seller_id` = 8;

然后在下面运行以取消设置最后一个键-

UPDATE `sellers`
SET `seller_phone` = JSON_REMOVE(`seller_phone`, "$.2") WHERE `seller_id` = 8

答案 1 :(得分:1)

首先,您需要了解 JSON_SET

的格式
  

JSON_SET(column_name,path,val [,path,val] ...)

设置值

JSON_SET(`seller_phone`, "$.0", "33565388", "$.1", "33565399") 

所以你的查询将是:

UPDATE `sellers`
SET `seller_phone` = JSON_SET(`seller_phone`, "$.0", "33565388", "$.1", "33565399")
WHERE `seller_id` = 8

答案 2 :(得分:0)

我找到了解决方案:

  1. $查询: 'UPDATE sellers SET seller_phone = "[]" WHERE seller_id = '.$seller_id;
  2. $查询: 'UPDATE sellers SET seller_phone = JSON_SET(seller_phone, '.$seller_phones.') WHERE seller_id = '.$seller_id;
  3. 注意:

    function explode_lines($seller_phones_input) {
        return explode("\r\n", $seller_phones_input);
    }
    
    function array_to_query($seller_phones) {
    
        $query = null;
    
        for ($i = 0; $i < count($seller_phones); $i++){
    
            if ($i!=0){
                $query .= ", ";
            }
    
            $query .= '"$['.$i.']", "' . $seller_phones[$i] . '"';
        }
    
        return $query;
    }