我的表中的列是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
现在,我该怎么做才能解决这个问题?
答案 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)
我找到了解决方案:
'UPDATE sellers SET seller_phone = "[]" WHERE seller_id = '.$seller_id;
'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;
}