id | title | text
1 | aa |
2 | aa |
3 | aa |
我有来自json data
的一些数据,我不确定有多少数据有重复数据。
$json = '[{"a":"1","b":"bb"},{"a":"2","b":"cc"},{"a":"3","b":"bb"}]';
$array = json_decode($json);
foreach($array as $key){
UPDATE table SET text = '".$key->b."' WHERE id = '".$key->a."' and title='aa'");
}
例如,在这种情况下,$key->b
有来自json数据的2个数据bb
,我只想更新第一个并检查数据库中是否已有bb
,然后忽略更新。
id | title | text
1 | aa | bb
2 | aa | cc
3 | aa | <-ignore updtae, left the data empty
我知道有一个简单的方法,首先select * from table where text != '$key->a'
进行检查,但这将花费2个mysql查询并再多做一次,所以
如何使用一个mysql查询,更新数据不重复?
非常感谢。答案 0 :(得分:1)
如果您的数据库是MySQL,也许您可以使用ON DUPLICATE KEY UPDATE
。
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
答案 1 :(得分:0)
我建议使用数组存储到目前为止使用的b
的所有值,如果该值尚不存在,则仅运行UPDATE
。
$json = '[{"a":"1","b":"bb"},{"a":"2","b":"cc"},{"a":"3","b":"bb"}]';
$usedValues = array();
$array = json_decode($json);
foreach($array as $key){
if(!isset(usedValues[$key->b])) {
mysql_query("UPDATE table SET text = '".$key->b."' WHERE id = '".$key->a."' and title='aa'");
usedValues[$key->b] = true;
}
}
编辑:如果您的数据库已有text
的值,这可能仍会产生重复项,但您可以执行SELECT DISTINCT ´text´
并填充$usedValues
数组它们。