【问题标题】:How to update Json data type in MySql?如何在 MySql 中更新 Json 数据类型?
【发布时间】:2017-07-16 03:45:58
【问题描述】:

我的表中有 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":"33565399","2":"33565311"}) WHERE Seller_id = 8' 附近使用的正确语法1

MySql 版本:5.7.9

现在,我能做些什么来解决这个问题?

【问题讨论】:

  • ""这里是不是错字"33565399""}

标签: php jquery mysql sql json


【解决方案1】:

您可以使用 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

【讨论】:

    【解决方案2】:

    首先你需要了解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
    

    【讨论】:

    • 谢谢,记录已更新,但我还有一个问题。最后更新记录是{"0": "33565388", "1": "33565399", "2": "044-33565311"}。我想删除对象 2。我该怎么做?
    • 你需要检查你如何使用 JSON_REMOVE
    【解决方案3】:

    我找到了解决办法:

    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;

    注意:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 1970-01-01
      • 2021-06-16
      • 2018-09-14
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多