MYSQL只更新一个键:json数组中的值

时间:2014-11-12 14:38:04

标签: php mysql json

我需要打包才能为一个json键重置一个值

{
"newsletter":"1",
"contactcategories":"40",
"newslettermessagetitle":"Hey hey its  the monkeys",
"newslettermessage":"And we got something to say...."
}

我正在尝试弄清楚如何格式化MYSQL UPDATE查询,该查询将在json中保留所有内容,但仅将新闻稿密钥的1更改为0。

所以基本上这会结束我的结果:

{
"newsletter":"0",
"contactcategories":"40",
"newslettermessagetitle":"Hey hey its  the monkeys",
"newslettermessage":"And we got something to say...."
}

到目前为止,我有这个但是无法绕过它。甚至可以使用mysql查询更新一个json密钥和值吗?

UPDATE #__table 
SET params='(SELECT *
            FROM #__table
            WHERE params LIKE '%\"newsletter\":\"1\"%')'i WHERE id='$id'

感谢任何可以帮助的人:) 强尼

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题:将json字符串解码为数组:

$myResultArray = json_decode($jsonString, true);

然后你可以使用关联数组。

例如:$myResultArray['newsletter'];

$sql = "UPDATE #__table SET newsletter = '".$myResultArray['newsletter']."' WHERE id='".$id."'";

答案 1 :(得分:0)

您无法在单个查询中执行此操作,因为MySql没有JSON概念。 你需要做一个选择:

"SELECT params FROM #__table WHERE id='{$id}'"

编辑php中的数据

$params = json_decode($row['params']);
$params->newsletter = 0;

然后更新

"UPDATE #__table SET params = '{json_encode($params)}' WHERE id='{$id}'"