如何使用一个mysql查询,更新数据没有重复?

时间:2011-11-12 12:22:35

标签: php mysql

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查询,更新数据不重复?

非常感谢。

2 个答案:

答案 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数组它们。