0

私は 2 つのデータベースを持っています。1 つは非常に大きなもの (5 GB) で、もう 1 つは小さなもので、PHP を cron ジョブとして実行して更新し、大きなデータベースから必要なデータを抽出します。

これまでのところ、大きなデータベースからデータを抽出し、行がまだ存在しない場合は小さなデータベースに挿入することができました。

データベースの行は次のようになります。

123456 TeamA-TeamB 1.14 4.30 7.60
(id, eventname, odds1, oddsX, odds2)

PHP は、a) 行が存在するかどうかを確認し、b1) 存在しない場合は追加し、b2) 存在する場合は、ods1、odsX、および odds2 の値が異なることを確認し、c) 存在する場合は値を更新する必要があります。

これは、a) と b1) を実行するコードです。

$SQL_INSERT="INSERT IGNORE INTO oddsnavi_baby.calc (id, eventname, odds1, oddsX, odds2) VALUES ('$eventid', '$eventname', '$odds1', '$oddsX', '$odds2')";
mysql_db_query($database_baby, $SQL_INSERT) or die("Failed Query of " . $SQL_INSERT);

ods1、odsX、またはods2の既存の値がデータベースに書き込まれる予定の値と異なる場合、この部分を変更して行を更新するにはどうすればよいですか? 最初の 2 つは変更されないため、値が異なる場合に行が更新されても問題ありません。

4

2 に答える 2

0
$SQL_INSERT="INSERT IGNORE INTO oddsnavi_baby.calc (id, eventname, odds1, oddsX, odds2) VALUES ('$eventid', '$eventname', '$odds1', '$oddsX', '$odds2')";
$SQL_UPDATE="update oddsnavi_baby.calc set odds1=\"$odds1\",oddsX=\"$oddsX\",odds2=\"$odds2\" where id=\"$eventid\");
$query="select * from oddsnavi_baby.calc where id=\"$eventid\"";
$process=mysql_query($query);
if(mysql_num_rows($process))       
        mysql_db_query($SQL_UPDATE);
else
        mysql_db_query($database_baby, $SQL_INSERT) or die("Failed Query of " . $SQL_INSERT);

この場合、行データに変更がない場合は冗長性があり、オーバーヘッドとなる更新も行われます。値を確認すると、それを減らすことができます

于 2012-04-07T11:03:57.680 に答える
0

試す:

REPLACE INTO 

INSERT IGNORE INTO の代わりに。

ドキュメントはこちら: http://dev.mysql.com/doc/refman/5.0/en/replace.html

于 2012-11-13T21:36:50.957 に答える