2011-11-12 7 views
0
id | title | text 
1 | aa | 
2 | aa | 
3 | aa | 

私はjson dataからいくつかのデータを持っていますが、いくつのデータが重複しているかわかりません。1つのmysqlクエリを使用する方法、重複なくデータを更新する方法

$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は、私が最初のものだけを更新し、bbが既にデータベースには、更新を無視しているかどうかを確認したい、2つのデータJSONデータから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のクエリの費用と1つの以上のforeachを作るので、重複することなく、1つのmysqlのクエリ、更新データを使用する方法

ます?

多くのありがとう。

答えて

1

データベースがMySQLの場合は、おそらくON DUPLICATE KEY UPDATEを使用できます。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

@ user1043095、これは挿入ですか?しかし、私は更新が必要です、最初の2つのフィールドは既にテーブルにあります。 –

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

EDIT:あなたのデータベースがすでにtextの値を持っている場合、これはまだ重複が生じることがありますが、SELECT DISTINCT ´text´を行い、それらと$usedValues配列を移入できます。

+0

答えてくれてありがとう、これは現在の 'json data'をスキャンするだけですが、' json data'がたくさんあると、別の 'json data'からmysqlを更新すれば、重複したデータを挿入しないようにする方法は? (1.txt、2.txt、3.txt ...) 'json_decode(file_get_contents( '1.txt'));' –